C# - 带矩阵的文本文件 - 划分所有条目

Yos*_*eck 8 c# arrays matrix

我有一个带有1122 x 1122降水测量矩阵的文本文件.每个测量用4个十进制数字表示.示例行看起来像这样:

0.0234 0.0023 0.0123 0.3223 0.1234 0.0032 0.1236 0.0000 ....

(这1122个值长,1122个线下降.

我需要相同的文本文件,但所有值除以6.(我必须这样做920个文件......)

我设法做到了这一点,但毫无疑问是残忍无效和内存穷举的方式:

  1. 我逐个打开文本文件,逐行读取每个文本文件
  2. 我将每一行拆分为一个字符串数组,其中单独的值作为成员
  3. 我遍历数组,将每个值转换为double,除以6并将结果转换回字符串,格式化为4位十进制数字并作为成员存储在新的字符串数组中.
  4. 我把阵列加入了一条线
  5. 我将此行写入新的文本文件.
  6. 瞧(大约一个小时后......)我有920个新的文本文件.

我相信有一个更快更专业的方法来做到这一点.我查看了有关Matrix.Divide的无尽网站,但没有看到(或理解)针对此问题的解决方案.任何帮助将不胜感激!这是用于每个文件的代码段:



    foreach (string inputline in inputfile)
    {
        int count = 0;
        string[] str_precip = inputline.Split(' ');  // holds string measurements
        string[] str_divided_precip = new string[str_precip.Length]; // will hold string measurements divided by divider (6)
        foreach (string measurements in str_precip)
        {
            str_divided_precip[count] = ((Convert.ToDouble(measurements)) / 6).ToString("F4", CultureInfo.CreateSpecificCulture("en-US"));
            count++;
        }
        string divline = string.Join(" ", str_divided_precip);
        using (System.IO.StreamWriter newfile = new System.IO.StreamWriter(@"asc_files\divfile.txt", true))
        {
            newfile.WriteLine(divline);
        }
    } 

Run Code Online (Sandbox Code Playgroud)

pid*_*pid 2

您打开/关闭每个值的输出,我认为我们可以做得更好!只需将其替换为以下代码:

using (System.IO.StreamWriter newfile = new System.IO.StreamWriter(@"asc_files\divfile.txt", true))
{
    foreach (string inputline in inputfile)
    {
        int count = 0;
        foreach (string measurements in inputline.Split(' '))
        {
            newfile.Write((Convert.ToDouble(measurements) / 6).ToString("F4", CultureInfo.CreateSpecificCulture("en-US")));
            if (++count < 1122)
            {
                newfile.Write(" ");
            }
        }

        newfile.WriteLine();
    }
} 
Run Code Online (Sandbox Code Playgroud)

对于读取部分,您可能希望一次读取一行,ReadLine()而不是读取一个大块中的整个文件,然后将其拆分到内存中。这种流式传输方法将大大减少内存分配,并且基于硬件(您有多少内存,您的磁盘(HDD?SSD?)有多快)可以以合理的方式提高性能!

请让我知道它现在是如何工作的,我很好奇!