对文件中的所有行应用计算

时间:2014-05-09 17:23:48

标签: c# file line streamreader

我遇到了问题,我无法在文本文件的所有行上执行计算。该计算仅适用于第一行。我希望在richTextBox2中看到我的结果。

这是我的代码:

using (StreamReader sr1 = new StreamReader(fileName))
{
    while ((line = sr1.ReadLine()) != null)
    {
        commands = line.Split(' ');
        if ((commands.Length > 1) && (commands[1].Contains('X')))
        {
            double X = Convert.ToDouble(commands[1].Substring(1, commands[1].Length - 1).Replace(".", ""));
            double Y = Convert.ToDouble(commands[2].Substring(1, commands[2].Length - 1).Replace(".", ""));
            Un = ((X * 100) / 1.57) / 1000;
            Deux = ((Y * 100) / 1.57) / 1000;

            richTextBox2.Text = "VM " + "M1=" + Un.ToString(".0") + " M2=" + Deux.ToString(".0");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您在每次迭代中分配richTextBox新文本而不是附加它。试试这个。

richTextBox2.Text += "VM " + "M1=" + Un.ToString(".0") + " M2=" + Deux.ToString(".0");

最好首先读取文件,然后将其分配给rictTextBox。像这样。

string fileData = "";
using (StreamReader sr = new StreamReader(fileName))
{
     fileData  = sr.ReadToEnd();
}

StringBuilder sb = new StringBuilder();
if (!String.IsNullOrEmptry(fileData))
{
   string[] splitedData = fileData.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); // Suppose file has delimited by newline

   foreach (string line in splitedData)
   {
       commands = line.Split(' ');
       if ((commands.Length > 1) && (commands[1].Contains('X')))
       {
           double X = Convert.ToDouble(commands[1].Substring(1, commands[1].Length - 1).Replace(".", ""));
           double Y = Convert.ToDouble(commands[2].Substring(1, commands[2].Length - 1).Replace(".", ""));
           Un = ((X * 100) / 1.57) / 1000;
           Deux = ((Y * 100) / 1.57) / 1000;

          sb.AppendLine("VM " + "M1=" + Un.ToString(".0") + " M2=" + Deux.ToString(".0"));
       }
   }

   richTextBox2.Text = sb.ToString();
}

答案 1 :(得分:0)

您可能希望使用StringBuilder来构建Text。正如其他人指出的那样,您每行都会覆盖RichTextBox's Text属性的值。 你可能想做这样的事情。

var sb = new StringBuilder();
using (StreamReader sr1 = new StreamReader(fileName))
{
    while ((line = sr1.ReadLine()) != null)
    {
        commands = line.Split(' ');
        if ((commands.Length > 1) && (commands[1].Contains('X')))
        {
            double X = Convert.ToDouble(commands[1].Substring(1, commands[1].Length - 1).Replace(".", ""));
            double Y = Convert.ToDouble(commands[2].Substring(1, commands[2].Length - 1).Replace(".", ""));
            Un = ((X * 100) / 1.57) / 1000;
            Deux = ((Y * 100) / 1.57) / 1000;

            sb.AppendLine("VM " + "M1=" + Un.ToString(".0") + " M2=" + Deux.ToString(".0"));
        }
    }
}
richTextBox2.Text = sb.ToString();

答案 2 :(得分:0)

如果通过“对所有行应用计算”,请记录richBox中每行的计算结果,然后需要连接新字符串,而不是指定新字符串。< / p>

using (StreamReader sr1 = new StreamReader(fileName))
{
    while ((line = sr1.ReadLine()) != null)
    {
        commands = line.Split(' ');
        if ((commands.Length > 1) && (commands[1].Contains('X')))
        {
            double X = Convert.ToDouble(commands[1].Substring(1, commands[1].Length - 1).Replace(".", ""));
            double Y = Convert.ToDouble(commands[2].Substring(1, commands[2].Length - 1).Replace(".", ""));
            Un = ((X * 100) / 1.57) / 1000;
            Deux = ((Y * 100) / 1.57) / 1000;

            richTextBox2.Text += String.Format("VM M1={0} M2={1}", Un.ToString(".0"), Deux.ToString(".0"));
        }
    }
}

此外,你应该在这种情况下使用String.Format,它使它更具可读性。