0

私はテキストファイルを持っています。これは彼のフォーマットのごく一部です:

DANNY VIDEO HISTOGRAM DATA
FORMAT VERSION:1.00
SOURCE: <MVI_2483.AVI_Automatic>
DATA: 
Frame 000000: 5977,40775,174395,305855,265805
Frame 000001: 5432,21333,456789,123456,111111

今、すべての行フレーム.....256 の数字を持っています 5977,40775,174395,305855,265805 例では、ここでは 5 つの数字しか示していませんが、各行/フレームには 256 の数字があります。

Form1 にはリストがあります: List Histograms

私がする必要があるのは、テキスト ファイルを読み取ることです。この場合、テキスト ファイル名は Histograms.txt で、テキスト ファイルと、リストに追加する必要がある 256 の数字を含む各行/フレームを読み取ります。したがって、リスト ヒストグラムは最終的にインデックス [0] で、たとえば [0] 5977 [2] 174395 [3] 305955 [4] 265805 などに 256 のインデックスを持つことになります。 .

次に、インデックス1に再び 256 の数字が...次にインデックス [2] に...

最後に、リスト 3803 インデックスに、各インデックスが 256 インデックス内にあり、それぞれに番号が含まれている必要があります。

これは、リストに数字が含まれているときにテキストファイルを作成する方法のコードであり、プログラムを再度実行するときに、テキストファイルを読み取ってリストにロードする必要があります。プログラムを実行しているとき、リストは空です。

private void WriteHistograms() // For automatic mode only for now
{
    HistogramsFile = new StreamWriter(_outputDir + "\\" + averagesListTextFileDirectory + "\\"  + "Histograms.txt", false, Encoding.ASCII);
    HistogramsFile.WriteLine("DANNY VIDEO HISTOGRAM DATA\r\nFORMAT VERSION:1.00\r\nSOURCE: " + "<" + averagesListTextFile + ">" + "\r\nDATA: ");
    for (int i = 0; i < Histograms.Count; i++)
    {
        HistogramsFile.Write("Frame " + i.ToString("D6") + ": ");
        for (int x = 0; x < Histograms[i].Length; x++ )
        {
            HistogramsFile.Write(Histograms[i][x] + ",");
        }
        HistogramsFile.WriteLine("!");
    }
    HistogramsFile.WriteLine("DATA");
    HistogramsFile.Close();
}

LoadHistograms() という別の関数があります。テキスト ファイルを読み取って、リストに数値を追加し直す必要があります。

リストをテキスト ファイルに書き込むときのリストの写真と、テキスト ファイルから読み戻した後のリストの外観を追加しました。

ここに画像の説明を入力

4

1 に答える 1

0

このコードを使用して、それを実行する方法をかなりよく理解できます。

string line;
List<long[]> list = new List<long[]>();

using (StreamReader file = new StreamReader(@"..\..\Histograms.txt"))
{
    do { line = file.ReadLine(); } while (!line.Trim().Equals("DATA:"));                               

    while ((line = file.ReadLine()) != null)
    {
        long[] valArray = new long[256];

        var split = line.Split(new char[] { ':' });
        if (split.Length == 2)
        {
            var valArrayStr = split[1].Split(new char[] { ',' });
            for (int i = 0; i < valArrayStr.Length; i++)
            {
                int result;
                if (int.TryParse(valArrayStr[i].Trim(), out result))
                    valArray[i] = result;
            }
        }
        list.Add(valArray);
    }
}

ハッピーコーディング...

于 2012-10-06T04:12:55.800 に答える