Finaly私は仕事にそれを持って来ることができました4日後に...原因イムそれは、C#に精通し、私はかなり初心者ですません...
私はそれはまだ多くのことを縫い目原因たかったです質問...
<--BeginOfFirstBlock
T;N;400.20;;1;;nach DIN EN 545, mit;2;;Steckmuffenverbindung Tyton, innen mit;
T;N;400.20;;3;;Zementmörtelauskleidung, außen;4;;BioZinalium bestehend aus;
T;N;400.20;;5;;Zink-Aluminium-Legierung (ZnAl 85-15);6;;mit Kupfer (Cu) angereichert,;
T;N;400.20;;7;;flächenbezogene Masse von mind. 400;8;;g/m² NOVO.SIT und blaue;
T;N;400.20;;9;;AQUACOAT-Deckbeschichtung, Baulänge 6;10;;m, Gussrohre für Wasser, NATURAL;
T;N;400.20;;11;;Muffendruckrohr Tyton, DN: 80,;12;;Druckklasse : C50, d1: 98, Gewicht;
T;N;400.20;;13;;(kg) pro 1 m: 12,5;;;;;
A;N;400.20;40;NATURAL Muffendruckrohre aus duktilem;Gußeisen Tyton DN 80;1;0;m;2580;5;0;400.20; <-- ThisHasToBeEditedBasedOnBlock1NeededWordMatches
<-- EndOfFirstBlock
<-- StartOfSecondBlock
T;N;405.20;;1;;nach DIN EN 545, mit;2;;Steckmuffenverbindung Tyton, innen mit;
T;N;405.20;;3;;Zementmörtelauskleidung, außen;4;;BioZinalium bestehend aus;
T;N;405.20;;5;;Zink-Aluminium-Legierung (ZnAl 85-15);6;;mit Kupfer (Cu) angereichert,;
T;N;405.20;;7;;flächenbezogene Masse von mind. 400;8;;g/m² und blaue;
T;N;405.20;;9;;AQUACOAT-Deckbeschichtung, Baulänge 6;10;;m, Gussrohre für Wasser, NATURAL;
T;N;405.20;;11;;Muffendruckrohr Tyton, DN: 100,;12;;Druckklasse : C50, d1: 118, Gewicht;
T;N;405.20;;13;;(kg) pro 1 m: 15,2;;;;;
A;N;405.20;40;NATURAL Muffendruckrohre aus duktilem;Gußeisen Tyton DN 100;1;0;m;2470;5;0;405.20; <-- ThisHasToBeEditedBasedOnBlock2NeededWordMatches
<-- EndOfSecondBlock
AndSoOn...
は今..私は..リストに、[]の文字列に辞書をすべてのブロックを保存するためにしようと試みたというように..私はそれを保存いけないが、RAMに即座にそれを編集することでも試してみましたしかし、うまくいきませんでした... 今私はFile.ReadAllLines
といくつかのifとforeachで試しました。この縫い目はこれまでのところ作動し、現在は300msしか必要ありません。それがうまくいかなかった理由はまだ分かりません。デバッグモードで永久に実行されていました。 はとにかく..私のnoobの方法は、今のようになります。
string[] ipt2 = File.ReadAllLines(input, Encoding.Default);
HashSet<string> matches = new HashSet<string>();
List<string> dnMatches = new List<string>();
string[] patHighMatch = new string[] { @"Tyton(?!.*\bSIT\b)(?!.*\bPLUS\b)", @"\bNOVO.SIT\b" };
for (int i = 0; i < ipt2.Length; i++) // Geht Zeile für Zeile durch
{
if (ipt2[i].StartsWith("T;N;")) // Überprüft die Zeile nur wenn die Zeile mit T;N; anfängt
foreach (var match in patHighMatch) // Geht alle pattern`s im StringArray durch
{
Match Match = Regex.Match(ipt2[i], match, RegexOptions.IgnoreCase);
if (Match.Success)
matches.Add(Match.Groups[0].ToString());
}
if (matches.Count != 1 && ipt2[i].StartsWith("T;N;"))
{
string[] patLowMatch = new string[] { @"\bTyton.SIT.PLUS\b", @"\bTIS.K\b", @"\bSteckmuffenverbindung[^-]\bSTANDARD\b[^-]", @"[^-]\bSTANDARD\bVI\b[^-]" };
foreach (var match in patLowMatch)
{
Match Match = Regex.Match(ipt2[i], match, RegexOptions.IgnoreCase);
if (Match.Success)
matches.Add(match);
}
}
if (matches.Count > 0 && ipt2[i].StartsWith("A;N;"))
{
ipt2[i] = ipt2[i].Replace("Tyton",String.Join(" ",matches)); // ReplaceTest
// ipt2[i] = ipt2[i].Replace("Tag", "DONEEE!");
// Console.WriteLine(ipt2[i].ToString());
matches.Clear();
replaces++;
}
}
は今、私は正規表現についての唯一の2最後の質問を持っているが、これは右の場所ではありません...とにかく私は、実際の作業環境で私のプログラムを試してみて下さい。とにかく試してみるとタイ。
入力と出力の簡単な例を提供できますか? – Jonas
http://www.filehelpers.net/example/Advanced/MultiRecordEngine/を見てください。その種の仕事についてRegExの使用をやめてください。 –
あなたは22k行を言います。 22k行を意味しますか? 'ブロック 'とは何ですか?各行はブロックであるか、ブロックは複数の行である可能性がありますか? – pookie