-2

ファイルを作成して保存するためにこれを行っています:

w = new StreamWriter(_outputDir + "\\" + averagesListTextFileDirectory + "\\" + averagesListTextFile + ".txt", false, Encoding.ASCII);
w.WriteLine("DANNY VIDEO META DATA\r\nFORMAT VERSION:1.00\r\nSOURCE: " + "<" + averagesListTextFile + ">" + "\r\nDATA: ");

for (int i = 0; i < averages.Count; i++)
{
    w.WriteLine(averages[i]);
}
w.WriteLine("DATA");
w.Close();

しかし今、私は各インデックスのリストからの値が別の値の配列を持っているファイルに保存したいと思います。好き:

[0] 123 33 44 55 66 ...
[1] 33 44 565 66 .. ..

各インデックスには256個の値があります。

DATAの後のテキストファイルを次のように表示します。次の行は次のようになります。

フレーム番号1:123 33 44 55 66
フレーム番号2:33 44 565 66

したがって、各行には256個の値が含まれます。

このフォーマット。

これで、ファイルの形式は次のようになります。

DANNYビデオメタデータ
フォーマットバージョン:1.00
ソース:
データ:
15.1199916409607
13.7612831147295
13.746730806327
13.2768227559145

リストから値を読み取ると、形式は次のようになります。

DANNYビデオメタデータ
フォーマットバージョン:1.00
ソース:
データ:

フレーム番号1:123 33 44 55 66
フレーム番号2:33 44 565 66

問題は、各インデックスに256個の値が含まれているリストを読み取る方法と、テキストファイルに書き込む方法です。

これは私がそれをやろうとした方法です:

private void WriteHistograms() // For automatic mode only for now
        {
            HistogramsFile = new StreamWriter(_outputDir + "\\" + averagesListTextFileDirectory + "\\"  + "Histograms.txt", false, Encoding.ASCII);
            HistogramsFile.WriteLine("DANNY VIDEO META DATA\r\nFORMAT VERSION:1.00\r\nSOURCE: " + "<" + averagesListTextFile + ">" + "\r\nDATA: ");
            foreach (long[] array in Histograms)
            {
                foreach (long value in array)
                {
                  frameNumber++;
                  HistogramsFile.WriteLine("Frame Number " + frameNumber + " : " + value);                      

                }
            }
            HistogramsFile.WriteLine("DATA");
            HistogramsFile.Close();

結果は25MBのファイルサイズです!そして、これがテキストファイルフォーマットの例です:

DANNY VIDEO META DATA
FORMAT VERSION:1.00
SOURCE: <MVI_2483.AVI_Automatic>
DATA: 
Frame Number 1 : 5977
Frame Number 2 : 40775
Frame Number 3 : 174395
Frame Number 4 : 305855
Frame Number 5 : 265805
Frame Number 6 : 212232
Frame Number 7 : 153333
Frame Number 8 : 99743
Frame Number 9 : 62334
Frame Number 10 : 41018
Frame Number 11 : 27381
Frame Number 12 : 21403
Frame Number 13 : 18324

最後に、フレーム番号が表示されます。

Frame Number 973822 : 666
Frame Number 973823 : 1118
Frame Number 973824 : 0

ここで、最後のフレームが0である理由と、実際には約3800フレームしかないのに973824フレームである理由を確認してください。

それで、ファイルサイズは論理25MBですか?そして、私が望んでいたフォーマットは次のようなものです。

フレーム番号1:33 44 55 66 77 88 ......(この行の256の値)フレーム番号2:22 33 12 3 44 55 .......(この行の256の値)

等々。

リストヒストグラムは、すべてのインデックスに256個のインデックスがあり、それぞれに番号が付いているタイプです。

[0]持っている:[1] 23 [2] 22 [3] 44など[1]持っている:[1] 12 [2] 13[3]21など

では、何が問題なのですか?

4

1 に答える 1

1

元のforループにはネストされたforループが必要です。

foreach(long[] array in averages)
{

     foreach(long value in array)
     {
          w.WriteLine(value);
     }
}

これにより、配列のリストを反復処理できます。一般に、ほとんどの2次元データ構造では、このタイプのループに従います。

編集:各配列を別々の行に出力する場合は、ループを次のように変更する必要があります。

int frameNumber = 1;
foreach(long[] array in averages)
{
     w.WriteLine("Frame Number " + frameNumber + " : ");
     frameNumber++;

     foreach(long value in array)
     {
          w.Write(value).Write(' ');
     }
}

これにより、次のようになります。

Frame Number 1 : 10 15235 198 65439 24098...
Frame Number 2 : 10232 135 45619 895649 4598...
...
Frame Number N : 987 651 654 968498 21654...
于 2012-10-05T15:54:19.897 に答える