1

我正在尝试从文件中检索数据以更改它并替换旧数据。

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

TEXT  NEXT_TEXT  10.505   -174.994 0  
TEXT  NEXT_TEXT  100.005  174.994  90  
TEXT  NEXT_TEXT  -10.000  -5.555   180  
TEXT  NEXT_TEXT  -500.987 5.123    270  
TEXT  NEXT_TEXT  987.123  1.000    180  
TEXT  NEXT_TEXT  234.567  200.999  90 

我正在尝试获取第3 列和第 4 列以根据用户输入的内容更改数据TextBoxes让我们将第 3 列 标记为“X”,将第 4 列标记为 “Y”。有了这个,还有两个标记为"xTextBox""yTextBox"的文本框。这些文本框允许用户输入数字,并且他们为每个文本框(X 和 Y)输入的数字(正数、负数和/或小数点后 3 位)将添加到“X”列值和“Y”列值。

现在,我正在使用此代码(如下)去除“X”和“Y”列,并将它们的值显示到不同的RichTextBoxes标记xRichTextBoxyRichTextBox中。

所以,xRichTextBox看起来像这样:

10.505
100.005
-10.000
-500.987
987.123
234.567

yRichTextBox看起来像这样

-174.994
174.994
-5.555
5-123
1.000
200.999

代码:

    private void calculateXAndYPlacementTwo()
    {
        // Reads the lines in the file to format.
        var fileReader = File.OpenText(filePath);

        // Creates a list for the lines to be stored in.
        var fileList = new List<string>();

        // Adds each line in the file to the list.
        while (true)
        {
            var line = fileReader.ReadLine();
            if (line == null)
                break;
            fileList.Add(line);
        }

        // Creates new lists to hold certain matches for each list.
        var xyResult = new List<string>();
        var xResult = new List<string>();
        var yResult = new List<string>();

        // Iterate over each line in the file and extract the x and y values
        fileList.ForEach(line =>
        {
            Match xyMatch = Regex.Match(line, @"(?<x>-?\d+\.\d+)\s+(?<y>-?\d+\.\d+)");
            if (xyMatch.Success)
            {
                // grab the x and y values from the regular expression match
                String xValue = xyMatch.Groups["x"].Value;
                String yValue = xyMatch.Groups["y"].Value;

                // add these two values, separated by a space, to the "xyResult" list.
                xyResult.Add(String.Join(" ", new[]{ xValue, yValue }));

                // Adds the values into the xResult and yResult lists.
                xResult.Add(xValue);
                yResult.Add(yValue);

                // Place the 'X' and 'Y' values into the proper RTB.
                xRichTextBox.AppendText(xValue + "\n");
                yRichTextBox.AppendText(yValue + "\n");
            }
        });
    }

因此,例如,如果用户输入“10.005”xTextBox-20yTextBox更新 xRichTextBox将如下所示:

20.510
110.010
0.005
-490.982
997.128
224.572

更新 后的yRichTextBox样子是这样的:

-194.994
154.994
-25.555
-14.877
-19.000
180.999

在这发生之后,我试图用更新的值替换原始文件的第 3 列和第 4 列

  • 我目前正在文件中获取值(“X”和“Y”)并将它们输出到单独RichTextBoxes的,但我不知道如何将这些值添加到从每个输入的值中TextBox......我该怎么做?
  • RichTextBox使用“TextBox”值计算值后,如何获取这些新值并将它们添加到原始文件中?

**这些值并不总是相同的,否则我会将它们硬编码。


因此,新文件将如下所示:

TEXT  NEXT_TEXT  20.510   -194.994 0  
TEXT  NEXT_TEXT  110.010  154.994  90  
TEXT  NEXT_TEXT  0.005    -25.555  180  
TEXT  NEXT_TEXT  -490.982 -14.877  270  
TEXT  NEXT_TEXT  997.128  -19.000  180  
TEXT  NEXT_TEXT  224.572  180.999  90 
4

3 回答 3

1

我建议使用结构化文本文件解析器来解析和重写文件。

Microsoft.VisualBasic.FileIO命名空间中有一个, TextFieldParser. 这是一个普通的 .NET 程序集,因此您可以在代码中引用它并从 C# 中使用。

于 2011-07-26T19:52:49.613 回答
1

您知道如何阅读文件,但听起来好像您只是将它们直接放入文本框中。我会创建一个对象来表示一条线(使用 x、y 以及最后一列是什么)。当你读入它们时,创建一个对象列表。要显示它们,循环并选择每个 x(如果您使用 4.0,可以使用 linq 轻松完成)和每个 y 用于单独的。要更新,循环并为每个对象添加适当的数字。然后保存,只需再次写出每个对象。

编辑:在更仔细地查看您的代码之后,您保留了 X 列表和 Y 列表。创建我提到的对象并仅保留这些对象的列表。

于 2011-07-26T19:55:26.203 回答
0

在您保存日期之前,请务必创建要保存的数据字符串,然后使用 textwriter 或 streamwriter 将所有内容再次保存到文件中。我认为你不能只更改文件的一部分并保存它

于 2011-07-26T19:55:42.460 回答