繁体   English   中英

读取 txt 文件并将其发送到数组 C#

[英]Reading a txt file and sending it to an Array C#

我有一个看起来像这样的文本文件

Words Words 
Words Words 
Words Words 
1    34.4e+1
2    34.3e+1 
3    34.2e+1
4    34.1e+1.... // and so on  

我需要获取字符串编号并将其转换为十进制/双精度,然后将其发送到一个数组,我可以在其中使用 for 循环之外的数组通过 Enumerable.Chunk 获取平均值


decimal[] raw = new decimal[] { }; 
decimal[] rawAvgList = new decimal[] { };
decimal RawAvg = 0m;


try
{
   string bPath = aPath + "\\" + fileName.Name + "\\textfilename.txt";
   string[] readText = File.ReadAllLines(bPath);
   readText = readText.Skip(3).ToArray();

   foreach (var line in readText)
   {
      raw = new decimal[] { Decimal.Parse(line.Substring(9).ToString(), style1) };

      for (int i = 0; i < raw.Length; i++)
      {
         Console.WriteLine("{0} \t {1}", raw[i], i++);
      }

   }

   rawAvgList = raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
   RawAvg = rawAvgList.Average();
}

因此,当我在循环外调用数组时,它只会获取文本文件中的最后一个数字。 我说的信息错了吗? 我发誓我已经尝试了所有不同的方法来调用文本文件中的号码,但我总是遇到错误。 错误范围从它不喜欢我同时使用 skip 和 substring 到它返回错误而不是数字的可枚举错误。 有什么可以帮忙的,谢谢!

您在每次循环迭代时将变量raw分配给一个新值,从而清除之前存储的任何值。 最终结果是循环终止后,它将只包含文件最后一行的值,如您所见。

您可以将raw声明为List<decimal> ,然后在循环中,您会这样做

raw.Add(Decimal.Parse(line.Substring(9).ToString(), style1));

这样,一旦循环完成,您将拥有所有数字,而不仅仅是最后一个。

这是有效的最终产品


List<decimal> raw = new List<decimal>();
decimal[] rawAvgList = new decimal[] { };
decimal RawAvg = 0m;

try
{
   string bPath = aPath + "\\" + fileName.Name + "\\textfilename.txt";
   string[] readText = File.ReadAllLines(bPath);
   readText = readText.Skip(3).ToArray();

   foreach (var line in readText)
   {
      raw.Add(Decimal.Parse(line.Substring(9).ToString(), style1);
   }

   rawAvgList = raw.Chunk(20).Select(chunk => chunk.Average()).ToArray();
   RawAvg = rawAvgList.Average();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM