1

300000行の.txtファイルがあります。そのファイルから特定の文字列(行)を抽出して別の.txtに保存したり、抽出された行のみをExcelに保存したりする方法はありますか?私はログファイルについて話します。そこでは、すべてのリクエストにかかる時間とともにいくつかのリクエストを保存します。私がやりたいのは、各リクエストの時間だけを抽出してから、平均所要時間を計算することです。

皆さんが私が話していることを理解してくれることを願っています。

編集:.txtファイルの形式はプレーンテキストであり、すべてのリクエストはで終わります。ので、私は持っています:

Starting date
//body of response from server
End date
Time: 3150,0792 ms <--- time taken

つまり、10000のリクエストと10000のレスポンスがあります。.txtファイル全体をスクロールして毎回チェックするのに手動で多くの時間がかかるため、それぞれの時間を抽出する必要があります。

4

5 に答える 5

4

あなたはファイルクラスによってそれを達成することができます

using (StreamWriter sw = File.AppendText("File2.txt")) 
{
    foreach (string line in File.ReadLines(@"d:\File1.txt"))
    {
        if (line.Contains("TheWordInLine"))//This is the line you want by matching something
        {
                sw.WriteLine("line);
        }
    }
}
于 2012-07-04T08:20:31.720 に答える
4

使ってみてMemoryMappedFileTextReader組み合わせてみてください。MMFを使用すると、大きなファイルにアクセスでき、テキストリーダーを使用すると、ファイルを1行ずつ処理できます。

using (var mmf = 
            MemoryMappedFile.CreateFromFile(@"c:\large.data", FileMode.Open
{
    using (MemoryMappedViewStream stream = mmf.CreateViewStream())
    {
        TextReader tr = new StreamReader(stream);
        while ((line = sr.ReadLine()) != null) 
        {
            Console.WriteLine(line);
        }
    }
}
于 2012-07-04T08:27:43.483 に答える
3

もちろん、 StreamReader / StreamWriterを使用できます:

using (var input = File.OpenText("input.log"))
using (var output = File.CreateText("output.log"))
{
    string line;
    while ((line = input.ReadLine()) != null)
    {
        if (SomeConditionOnLine(line))
        {
            output.WriteLine(line);
        }
    }
}

これにより、入力ファイルが1行ずつ読み取られるため、メモリには一度に1行しかありません。この行が、探している条件を満たしている場合は、出力ファイルに書き込みます。それは高速でメモリをほとんど消費せず、巨大な入力ファイルに対して機能します。

于 2012-07-04T08:22:20.143 に答える
3
    private void extract_lines(string filein, string fileout)
    {
        using (StreamReader reader = new StreamReader(filein))
        {
            using (StreamWriter writer = new StreamWriter(fileout))
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (line.Contains("what you looking for"))
                    {
                        writer.Write(line);
                    }
                }
            }
        }
    }
于 2012-07-04T08:26:19.827 に答える
2

他の人がすでに言ったように、フォーマットの例があると便利でしょう。とにかく、多分あなたはこのツールが役に立つと思うかもしれません:

http://filehelpers.sourceforge.net/

私は仕事でそれを使用し、それはあなたが異なるファイル形式を解析して書き込むことを可能にします。それが役に立てば幸い

于 2012-07-04T08:21:44.700 に答える