-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();

但是现在我想将每个索引中的 List 中的值保存到文件中,该值具有另一个值数组。喜欢:

[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 以及为什么 973824 帧,而实际上只有大约 3800 帧。

所以文件大小是逻辑25MB?我想要的格式是:

第 1 帧:33 44 55 66 77 88 ......(此行中有 256 个值) 第 2 帧:22 33 12 3 44 55 ......(此行中有 256 个值)

等等。

List Histograms 是一种在每个索引中都有 256 个索引的类型:

[0] 有:[1] 23 [2] 22 [3] 44 等等 [1] 有: [1] 12 [2] 13 [3] 21 等等

那么怎么了?

4

1 回答 1

1

您将需要在原始循环中嵌套一个 for 循环:

foreach(long[] array in averages)
{

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

这将允许您遍历您的数组列表。一般来说,对于大多数二维数据结构,您会遵循这种类型的循环。

编辑:如果要在单独的行上打印出每个数组,则需要按如下方式修改循环:

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 回答