質問
私にはプログラムを生成するテキストファイルです。の構造(レイアウト)はいつも同じです。例:
テキストファイル:
LinkLabel
"Hello, this text will appear in a LinkLabel once it has been
added to the form. This text may not always cover more than one line. But will always be surrounded by quotation marks."
240, 780
なので、説明しようとファイル:
Control
Text
Location
ときにボタンをクリックすると、ユーザが開きのこれらのファイルからのOpenFileDialogダイアログながらプレーする必要がありまを読むことはできます。からのトップに付いているかどうか確かめたいかに制御では、それらのラインがあるすべてのテキスト内にクォーテーションマーク(くるかどうかは一行のテキスト)は、次の行の後に閉会のクォーテーションマーク)を抽出する必要があり、位置(240,780)...のあり方を考えながら、その方法のについて行くこともに行った時に書いものにして実践されているとは思いませんが、く感や方法を考えるのではない。
ではもっこすか。うものときのお役に立てるよう、ご提案やアドバイスなったと思いつ?
私たCSVファイルが複雑すぎると思うが簡単です。
感謝 刷
解決
あなたはテキストから行を取得するには、正規表現を使用することができます:
MatchCollection lines = Regex.Matches(File.ReadAllText(fileName), @"(.+?)\r\n""([^""]+)""\r\n(\d+), (\d+)\r\n");
foreach (Match match in lines) {
string control = match.Groups[1].Value;
string text = match.Groups[2].Value;
int x = Int32.Parse(match.Groups[3].Value);
int y = Int32.Parse(match.Groups[4].Value);
Console.WriteLine("{0}, \"{1}\", {2}, {3}", control, text, x, y);
}
他のヒント
私は、私が(コメントで)これらの問題を解決する方法を試してみて、アルゴリズムを書き留めます:
// while not at end of file
// read control
// read line of text
// while last char in line is not "
// read line of text
// read location
試してみて、各コメントが言うことありませんそのコードを書いて、あなたがそれを把握することができる必要があります。
HTHます。
あなたはパーサを実装しようとしているし、そのための最善の戦略は、小さな部分に問題を分割することです。そして、あなたがすることができます TextReader
のクラスが必要です行を読みます。
ReadControl
、ReadControlType
、ReadText
:あなたは三つの方法にあなたのReadLocation
方法を分ける必要があります。各メソッドは、次の方法を拾うことができます位置にTextReader
を読んでおくべき項目だけを読み込むための責任があります。このような何かます。
public Control ReadControl(TextReader reader)
{
string controlType = ReadControlType(reader);
string text = ReadText(reader);
Point location = ReadLocation(reader);
... return the control ...
}
それは複数行にまたがるため、もちろん、READTEXTは、最も興味深いものです。実際には TextReader.ReadLine
を呼び出し、ループです行は引用符で終了するまでます:
private string ReadText(TextReader reader)
{
string text;
string line = reader.ReadLine();
text = line.Substring(1); // Strip first quotation mark.
while (!text.EndsWith("\"")) {
line = reader.ReadLine();
text += line;
}
return text.Substring(0, text.Length - 1); // Strip last quotation mark.
}
このようなものが刺激では、概念的には簡単なもので終わgnarlyます。だが比較的容易であるなどの場合:記録ファイル、行動の便が良いことから、力が低下していく傾向がありましく記録したいへの対応もひどく形成され記録の検討を書くための連想パーザaspなどの言語C#.
大規模問題の一つを使用する文法を駆動型パーサがこのような: リンクテキストをドキュメント
あなたは、この複雑さからの不規則性のファイルです。最初のフィールドが終了しnwline、第二による区切りにより、見積書、第終了カンマで区切...
私の最初のrecomendationいを調整する形式のファイルのようで本当に簡単に構文解析.書きファイルなんです。例えばなら、世界最大の新ラインのテキストの各項目にあります。その後できるだけ読みつのラインを作成"にチェックを入れます。