我有2个foreach循环,它们都是自己工作的(当另一个被注释掉时)..但是当我把它们粘在一起时,只有第一个工作....
// Splits the RichTextBox up so the numbers can be formatted properly.
String[] myXLines = calculateXRichTextBox.Text.Split('\n');
String[] myYLines = calculateYRichTextBox.Text.Split('\n');
// Converts the numbers to only contain 2 decimal places.
foreach (string decimalXLines in myXLines)
removedXDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalXLines), 2) + "\n");
foreach (string decimalYLines in myYLines)
removedYDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalYLines), 2) + "\n");
是否有人知道如何使其工作或为什么它无法正常工作(RTB不附加文本)?
提前感谢您的帮助。
private void calculateXAndYPlacementOne()
{
try
{
try
{
// Save the contents of the placementOneListBox into the file.
System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath + "\\Calculating X,Y File.txt");
foreach (object item in placementOneListBox.Items)
sw.WriteLine(item.ToString());
sw.Close();
}
// Catches an exception if the file was not saved.
catch (Exception)
{
MessageBox.Show("Could not write to file.");
}
// Reads the lines in the file to format.
var fileReader = File.OpenText(filePath + "\\Calculating X,Y File.txt");
// Creates a list for the lines to be stored in.
var fileList = new List<string>();
// Adds each line in the file to the list.
var fileLines = "";
while ((fileLines = fileReader.ReadLine()) != null)
fileList.Add(fileLines);
// 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 }));
// Add the results to the lists.
xResult.Add(xValue);
yResult.Add(yValue);
// Store the old X and Y values.
oldXRichTextBox.AppendText(xValue + "\n");
oldYRichTextBox.AppendText(yValue + "\n");
try
{
// Calculate the X & Y values (including the x & y displacements)
double doubleX = double.Parse(xValue);
double doubleXValue = double.Parse(xDisplacementTextBox.Text);
StringBuilder sbX = new StringBuilder();
sbX.AppendLine((doubleX + doubleXValue).ToString());
double doubleY = double.Parse(yValue);
double doubleYValue = double.Parse(yDisplacementTextBox.Text);
StringBuilder sbY = new StringBuilder();
sbY.AppendLine((doubleY + doubleYValue).ToString());
calculateXRichTextBox.AppendText(sbX + "");
calculateYRichTextBox.AppendText(sbY + "");
// Removes the blank lines.
calculateXRichTextBox.Text = Regex.Replace(calculateXRichTextBox.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
calculateYRichTextBox.Text = Regex.Replace(calculateYRichTextBox.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
}
// Catches if it fails
catch (Exception)
{
MessageBox.Show("Could not calculate the X & Y values.");
}
}
});
// Splits the RichTextBox up so the numbers can be formatted properly.
String[] myXLines = calculateXRichTextBox.Text.Split('\n');
String[] myYLines = calculateYRichTextBox.Text.Split('\n');
foreach (string decimalXLines in myXLines)
removedXDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalXLines), 2) + "\n");
foreach (string decimalYLines in myYLines)
removedYDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalYLines), 2) + "\n");
for (int theLine = 0; theLine < placementOneListBox.Items.Count; theLine++)
{
string replacement1 = calculateXRichTextBox.Lines[theLine];
while (replacement1.Length < 7)
replacement1 = " " + replacement1;
placementOneListBox.Items[theLine] = ((string)placementOneListBox.Items[theLine]).Remove(20, 7).Insert(20, replacement1);
string replacement2 = calculateYRichTextBox.Lines[theLine];
while (replacement2.Length < 7)
replacement2 = " " + replacement2;
placementOneListBox.Items[theLine] = ((string)placementOneListBox.Items[theLine]).Remove(29, 7).Insert(29, replacement2);
};
}
catch (Exception)
{
MessageBox.Show("Could not manipulate the data properly.");
}
File.Delete(filePath + "\\Calculating X,Y File.txt");
}
答案 0 :(得分:1)
如果将每个语句分成多个语句会发生什么?你正在使用AppendText()调用内联转换Convert.ToDouble()和Round()。你确定每一步都表现得正确吗?
答案 1 :(得分:1)
输入数据中的问题,每当输入字符串不正确时,Math.Round(Convert.ToDouble(decimalXLines),2)的调用都会抛出异常。如果该代码在后台线程中工作,则不会收到严重的异常。
在我看来,String []的最后一个元素myXLines = calculateXRichTextBox.Text.Split('\ n');是一个空字符串。
您可以尝试将StringSplitOptions.RemoveEmptyEntries添加到拆分代码中:
String[] myXLines = calculateXRichTextBox.Text.Split(new []{'\n'}, StringSplitOptions.RemoveEmptyEntries);
但这是解决方法,而不是100%令人担忧的解决方案。
答案 2 :(得分:0)
// Splits the RichTextBox up so the numbers can be formatted properly.
String[] myXLines = calculateXRichTextBox.Text.Split('\n');
String[] myYLines = calculateYRichTextBox.Text.Split('\n');
int counterX = 0;
int counterY = 0;
foreach (string decimalXLines in myXLines)
{
if (counterX == 0)
removedXDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalXLines), 2) + "");
if (decimalXLines != "" && counterX != 0)
{
removedXDecimalRichTextBox.AppendText("\n");
removedXDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalXLines), 2) + "");
}
counterX++;
}
foreach (string decimalYLines in myYLines)
{
if (counterY == 0)
removedYDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalYLines), 2) + "");
if (decimalYLines != "" && counterY != 0)
{
removedYDecimalRichTextBox.AppendText("\n");
removedYDecimalRichTextBox.AppendText(Math.Round(Convert.ToDouble(decimalYLines), 2) + "");
}
counterY++;
}