Gedcom(こことここ)ファイルから取得したテキストのブロックがあります
テキストはフラットで、基本的に「ノード」に分割されています
\r char の各ノードを分割し、それを各部分に分割しています (「行」の量は異なる場合があります)。
0 アドレスが常に ID になることはわかっていますが、その後はすべてがどこにでもある可能性があるため、配列の各セルをテストして、処理する正しいタグが含まれているかどうかを確認したいと考えています。
2 つのノードがどのように見えるかの例
0 @ind23815@ INDI <<<<<<<<<<<<<<<<<<< Start of node 1 1 NAME Lawrence /Hucstepe/ 2 DISPLAY Lawrence Hucstepe 2 GIVN Lawrence 2 SURN Hucstepe 1 POSITION -850,-210 2 BOUNDARY_RECT (-887,-177),(-813,-257) 1 SEX M 1 BIRT 2 DATE 1521 1 DEAT Y 2 DATE 1559 1 NOTE * Born: Abt 1521, Kent, England 2 CONT * Marriage: Jane Pope 17 Aug 1546, Kent, England 2 CONT * Died: Bef 1559, Kent, England 2 CONT 1 FAMS @fam08318@ 0 @ind23816@ INDI <<<<<<<<<<<<<<<<<<<<<<< Start of Node 2 1 NAME Jane /Pope/ 2 DISPLAY Jane Pope 2 GIVN Jane 2 SURN Pope 1 POSITION -750,-210 2 BOUNDARY_RECT (-787,-177),(-713,-257) 1 SEX F 1 BIRT 2 DATE 1525 1 DEAT Y 2 DATE 1609 1 NOTE * Born: Abt 1525, Tenterden, Kent, England 2 CONT * Marriage: Lawrence Hucstepe 17 Aug 1546, Kent, England 2 CONT * Died: 23 Oct 1609 2 CONT 1 FAMS @fam08318@ 0 @ind23817@ INDI <<<<<<<<<<< start of Node 3
だから、私が終わったら、私は次のような配列を持っています
address , string 0 = "1 NAME Lawrence /Hucstepe/" 1 = "2 DISPLAY Lawrence Hucstepe" 2 = "2 GIVN Lawrence" 3 = "2 SURN Hucstepe" 4 = "1 POSITION -850,-210" 5 = "2 BOUNDARY_RECT (-887,-177),(-813,-257)" 6 = "1 SEX M" 7 = "1 BIRT " 8 = "1 FAMS @fam08318@"
私の質問は、上記の配列を検索して、どのセルにSEXタグ、NAMEタグ、またはFAMSタグがあるかを確認する最良の方法は何ですか?
これは私が持っているコードです
private int FindIndexinArray(string[] Arr, string search) { int Val = -1; for (int i = 0; i < Arr.Length; i++) { if (Arr[i].Contains(search)) { Val = i; } } return Val; }
しかし、-1を返さないことを確認するために2回呼び出すことになるため、効率が悪いようです
そのようです
if (FindIndexinArray(SubNode, "1 BIRT ") != -1) { // add birthday to Struct I.BirthDay = SubNode[FindIndexinArray(SubNode, "1 BIRT ") + 1].Replace("2 DATE ", "").Trim(); }
申し訳ありませんが、これはより長い投稿ですが、うまくいけば、専門家のアドバイスが得られます