情報を抽出したい ~7MB のテキスト ファイルがあり、次のような形式のインスタンスが多数含まれています。
"name": "Riki's Dagger",
"defindex": 0,
"item_class": "dota_item_wearable",
"item_type_name": "#DOTA_WearableType_Daggers",
"item_name": "#DOTA_Item_Rikis_Dagger",
"proper_name": false,
"item_quality": 0,
"image_inventory": null,
"min_ilevel": 1,
"max_ilevel": 1,
"image_url": "",
"image_url_large": "",
名前と defindex を抽出し、このインスタンスにキーワードが含まれているか含まれていないかを確認し、後で使用できるように新しいテキスト ファイルに配置します。私の計画は、"name" の各インスタンス (引用符付き) をファイルで検索し、"name" の次のインスタンスの前のすべての内容を current という変数に設定することでした。次に、現在の文字列で必要な情報を検索します。それが最善の方法ですか、どうすればよいですか?正規表現を使用する必要がありますか、それともファイルが大きすぎますか? いくつかの方向性をいただければ幸いです。
これは私がこれまでに持っているものです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
namespace ConsoleApplication1
{
class Test
{
static void Main(string[] args)
{
string ingameschemaFilePath = @"C:\Users\Andrew\Documents\GitHub\SteamBot\Bin\Debug\ingameschema.txt";
string dota2schemaFilePath = @"C:\Users\Andrew\Documents\GitHub\SteamBot\Bin\Debug\dota2schema.txt";
string schemaFilePath = @"C:\Users\Andrew\Documents\GitHub\SteamBot\Bin\Debug\schema.txt";
string[] ingameschema = File.ReadAllLines(ingameschemaFilePath);
string[] dota2schema = File.ReadAllLines(dota2schemaFilePath);
string[] current = null;
string[] name = null;
string[] defindex = null;
string[] rarity = null;
using (TextWriter textWriter = new StreamWriter(schemaFilePath))
{
foreach (//search for "name"->"name" segment here)
{
// if current.Contains("dota_item_wearable") == false, current.Contains("announcer", "courier", "ward", "egg", "costume", "HUD", "smeevil", "taunt", "bait", "lure", "bundle" ) == true,
// break
}
}
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}