1

引用符の間のテキスト ファイル データを読み取る方法についての「アイデア」が必要です。例えば:

line 1: "read a title"

line 2: "read a descr"

line 1: "read a title"

line 2: "read a descr"

私は foreach タイプのことをしたいのですが、すべての行 1 と行 2 をペアとして読み取りたいのですが、".

私のプログラムでは、出力します(もちろん foreach ):

readTerminatedNull(file1);

readTerminatedNull(file2);

行ごとに読みますが、テキストの一部は次のようになります。

line 1: "read a super long
title that goes off"
line 2: "read a descr"

だから、「」の間を読みたいのです。

複雑すぎて申し訳ありませんが、説明するのは少し難しいです。

編集:すべてのフィードバックに感謝しますが、私がやろうとしていることをあなたが理解しているかどうかはわかりません.pあなたのせいではありません.

参考文献とテキストでいっぱいのテキストファイルがあります。そのようです。

内側のテキスト:

Refren: "myrefrence_1"
String: "This is a string of a refrence"
Refren: "myrefrence_2"
String: "hello world"
Refren: "myrefrence_3"
String: "I like cookies."

最初の行の引用符で myrefrence_1 を読み取り、次の行の ".

次に、参照を文字列と一致させるプログラムに詰め込みます。

ただし、テキストが複数行になる場合もあります。

Refren: "this is text that goes and then
return keys on some parts."

そして、私はまだ ".

4

7 に答える 7

3

(テストされていませんが、アイデアは得られます)

// Read all text from file
string sData = File.ReadAllText(@"c:/file.txt");

// Match strings between " "
Match match = Regex.Match(sData , "\"(\w|\d|\s|\\\")*\"",
                          RegexOptions.IgnoreCase);

// Read results and strip " out of them
foreach (var sResult in match) {
    sResult = sResult.Remove(0,1).Remove(sResult.length-2, 1);
    // Do whatever with sResult
}
于 2012-05-30T07:54:02.720 に答える
1

ステート マシンを調べることで、いくつかの新しいトリックを学ぶことができます。基本的に:一度に各文字を読んで、あなたが今どのような状態にあるかを把握してください. まず、これを大きなステートメントを内部whileに持つ大きなループとしてコーディングします。次に、オブジェクト指向の方法でこれを行う方法について、状態パターンswitchを読んでください。次に、それを捨ててs を使用します。c# を使用すると、この作業が非常に簡単になるからです。delegate

次に、すべてを破棄し、複数行フラグを使用してくだらない正規表現を作成し、 Perlの方法で丸呑みします。これが元のステート マシン ソリューションと同じである理由を考えてみてください。

次に、パーサー ジェネレーター( l​​exx / yaccまたは.NET バリアント) について学び、問題に対応する簡単なBNF文法を記述します。チュートリアルで使用されている簡単な文法は、実際に記述しなければならないものよりもはるかに複雑であることに特に注意してください。どうしてこんなことに?ノーム・チョムスキーがそれについて何を言わなければならなかったかをチェックしてください.

やがて燃え尽きてしまう。私たちは皆そうします。しかし、プログラミングが地球上で最もクールな活動である理由を掘り下げることは、とても楽しいことです。燃え尽き症候群は、それが夢物語であることに気づくだけです ;)

終わったら外へ。人々に会います。話。たくさん笑ってください。フレンドリーに。あなたは今、邪悪な笑みを浮かべた禅を取り入れた開発者です。よろしくね!あなたはロックします!

于 2012-05-30T07:52:38.467 に答える
0

私があなたから理解したように、あなたはいくつかの特定の設定でテキストファイルを読み書きしたいという質問です。それは...ですか ?

それ自体がテキストファイルであるINIファイルを参照し、必要に応じて設定構成を提供したいと思います。これらがあなたを助けることができるいくつかのリンクがここにあります。

http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C

http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/

于 2012-05-30T08:13:06.630 に答える
0

これを試してみてください

var text = File.ReadAllLines(pathToFile);
var lines = text.Split(':')
                .Where((s,i) => i % 2 != 0)
                .Select(s => s.trim('"'));
于 2012-05-30T07:55:01.323 に答える
0

まず、次のコマンドを使用してファイルを読み込む必要があります。

File.ReadAllLines(filePath);

次に、string.Split関数を使用してすべての行を分割できます。

閉じ括弧で分割するのが最善の策です。

于 2012-05-30T07:55:21.073 に答える
0

あなたが説明しているのは、単一列の CSV ファイルのように聞こえます。それにアクセスする最も簡単な方法は、おそらく次のMicrosoft.VisualBasic.FileIO.TextFieldParserようなクラスを使用することです。

using (var csvParser = new TextFieldParser(new StringReader(content))
                             {
                                 Delimiters = new[] {","},
                                 HasFieldsEnclosedInQuotes = true
                             })
{
    while (!csvParser.EndOfData)
    {
        var fields = csvParser.ReadFields();
        Console.Print(fields[0]); //do something with the first (in your case only) field found.
    }
}

おそらく、このアプローチが理にかなっているかどうかを判断する最も簡単な方法は、読んでいる文字列に実際に二重引用符が含まれている場合に何が起こるかを考えることです。それは"He said ""this is quoted"", but I wasn't listening"(引用符を2倍にする)になるのでしょうか、それともこの状況は不可能ですか?

このように引用符が 2 倍になる場合は、この組み込みフレームワークのような標準の CSV リーダーがおそらく最善の策です。

于 2012-05-30T08:03:36.843 に答える
0

ファイルのすべての行を読み取るには、次を使用できます。

File.ReadAllLines(pathToFile);

"" からテキストを削除するには、文字列の部分文字列メソッドを使用できます: http://msdn.microsoft.com/en-us/library/aka44szs.aspx

あなたはそのようにすることができます:

string strippedString = original.Substring(1, original.length -2);
于 2012-05-30T07:52:41.643 に答える