我正在尝试从文件中检索数据以更改它并替换旧数据。
我有一个看起来像这样的文件:
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”。这些文本框允许用户输入数字,并且他们输入的数字(正数,负数和/或小数点后3位小数)每个文本框(X和Y)将 ADDED 到“X”列值和“Y”列值。
现在,我正在使用 CODE (下方)去除“X”和“Y”列,并将其值显示在不同的RichTextBoxes
中标记为 xRichTextBox 和 yRichTextBox 。
因此, 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
的 CODE: 的
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");
}
});
}
SO 例如,如果用户输入“10.005”代表xTextBox
和“ - 20” yTextBox
已更新 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列。
RichTextBoxes
,但我不知道如何将这些值添加到从每个{\ n}输入的值中{1}} ......我该怎么做?TextBox
值后,如何获取这些新值并将其添加到原始文件中?**这些值并不总是相同,否则我会对它们进行硬编码。
所以,新文件看起来像这样:
RichTextBox
答案 0 :(得分:1)
我建议使用结构化文本文件解析器来解析和重写文件。
Microsoft.VisualBasic.FileIO
命名空间中有一个TextFieldParser
。这是一个普通的.NET程序集,因此可以在代码中引用它并从C#中使用。
答案 1 :(得分:1)
您知道如何阅读文件,但听起来好像您只是将它们直接放入文本框中。我会创建一个对象来表示一条线(带有x,y,以及最后一列是什么)。当您阅读它们时,创建一个对象列表。要显示它们,请循环并选择每个x(如果您使用的是4.0,则可以使用linq轻松完成),并且每个y都可以选择单独的x。要更新,循环并向每个对象添加适当的数字。然后保存,再次写出每个对象。
编辑:仔细查看代码后,您将保留一份X列表和一份Y列表。创建我提到的对象,只保留一个列表。
答案 2 :(得分:0)
在保存日期之前,请务必创建要保存的数据字符串,并使用textwriter或streamwriter将所有内容再次保存到文件中。我认为你不能只改变文件的一部分并保存它