如果我有一个RichTextBox
从一个包含以下内容的文件加载:
TEXT MORETEXT 10.505 100.994 0
TEXT MORETEXT -5.132 -12.994 90
TEXT MORETEXT 100.001 -8.994 270
和TextBox
,其中包含用户在文本框中输入的内容。假设用户输入“10.005”。
我的问题是,如何将此值和添加添加到包含值 10.505的 3rd 列中, - 5.132,100.001 。一旦添加,我想取值并替换字符串中的旧值。 SO 更新的RichTextBox
看起来像这样。
TEXT MORETEXT 20.510 100.994 0
TEXT MORETEXT 4.873 -12.994 90
TEXT MORETEXT 110.006 -8.994 270
现在正确我可以使用此代码从RichTextBox
中删除字符串:
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");
}
});
}
要使 xRichTextBox
中的值看起来像:
10.505
-5.132
100.001
和 yRichTextBox
看起来像:
100.994
-12.994
-8.994
但我不知道如何将这些转化为可以在其上使用添加的值...
修改 的 我已经搞砸了更多...我现在使用这个代码(下面)来尝试完成我需要它做的事情。这仅适用于 “X” (第3列)。
xRichTextBox
的末尾,而不是以数学方式将其添加到每一行..) xDisplacementTextBox
是用户输入,xRichTextBox
是主字符串中的剥离值。
StringBuilder stringBuilder = new StringBuilder();
string[] Lines = xRichTextBox.Text.Split('\n');
double d = double.Parse(xDisplacementTextBox.Text);
for(int i = 0; i < Lines.Length; ++i)
{
string newThing = double.Parse((Lines[i]) + d).ToString();
stringBuilder.AppendLine(newThing);
}
xRichTextBox.Text = stringBuilder.ToString();
这也不允许我输入带小数的值(即50.005)..
答案 0 :(得分:4)
看看double.Parse - 就像在 double x = double.Parse(xValue);
扩展,为你工作......
double d = double.Parse(xDisplacementTextBox.Text);
string[] Lines = xRichTextBox.Text.Split('\n');
for(int i = 0; i < Lines.Length; ++i)
{
Match lineMatch = Regex.Match(lines[i], @"^(?<p>.*)(?<x>-?\d+\.\d+)(?<y>\s+-?\d+\.\d+\s+-?\d+\.\d+)$");
if (lineMatch.Success)
{
double xValue = double.Parse(lineMatch.Groups["x"].Value) + d;
lines[i] = lineMatch.Groups["p"] + xValue + lineMatch.Groups["p"];
}
}
xRichTextBox.Text = string.Join(lines, '\n');
答案 1 :(得分:3)
字符串太多而数据结构不够。
这看起来像一个数据结构:
TEXT MORETEXT 10.505 100.994 0
TEXT MORETEXT -5.132 -12.994 90
TEXT MORETEXT 100.001 -8.994 270
所以,创建一个包含
的类"Text" string
"MoreText" string
10.505 - double (let's call this prop1)
100.994 - double
0 - int
我在这里推测数据值。
加载列表&lt;&gt;你的班级进入记忆。
然后,每次值更改时,将文本框值应用于对象列表。
伪码:
foreach(class c in List<>)
{
c.prop1 = c.prop1 + (double)Textbox.value;
}
在您的班级中覆盖ToString()
,并在富文本框中根据需要显示该对象。
就个人而言,我会使用一个列表框来显示对象。