我的RTB加载了一个如下所示的文件:
J6 INT-00113G 227.905 174.994 180 SOIC8
J3 INT-00113G 227.905 203.244 180 SOIC8
U13 EXCLUDES 242.210 181.294 180 QFP128
U3 IC-00276G 236.135 198.644 90 BGA48
U12 IC-00270G 250.610 201.594 0 SOP8
J1 INT-00112G 269.665 179.894 180 SOIC16
J2 INT-00112G 269.665 198.144 180 SOIC16
我想使用string.Split()方法删除最后一列。
到目前为止,我有:
// Splits the lines in the rich text boxes
string[] lines = richTextBox2.Text.Split('\n');
foreach (var newLine in lines)
{
newLine.Split(' ');
line = line[0] + line[1] + line[2] + line[3] + line[4]; #This is the code that does not work.
}
然而这不起作用......有没有人知道这个问题以及如何正确地做到这一点所以文件看起来像这样?:
J6 INT-00113G 227.905 174.994 180
J3 INT-00113G 227.905 203.244 180
U13 EXCLUDES 242.210 181.294 180
U3 IC-00276G 236.135 198.644 90
U12 IC-00270G 250.610 201.594 0
J1 INT-00112G 269.665 179.894 180
J2 INT-00112G 269.665 198.144 180
编辑:我还认为我需要string.Split(' ')
已经拆分的每一行?
答案 0 :(得分:7)
这可能有用(未经测试):
string[] lines = richTextBox2.Text.Split('\n');
for( int i = 0; i < lines.Length; i ++ )
{
lines[i] = lines[i].Trim(); //remove white space
lines[i] = lines[i].substring(0, lines[i].LastIndexOf(' ');
}
string masterLine = String.Join(Environment.NewLine, lines);
答案 1 :(得分:3)
这是一个固定宽度的布局,因此您可以通过切断第五列右侧的所有内容来完成您想要的任务:
string[] lines = File.ReadAllLines(path);
for (int i = 0; i < lines.Length; ++i)
{
lines[i] = lines[i].Substring(0, 43);
}
示例输入文件:
J6 INT-00113G 227.905 174.994 180 SOIC8
J3 INT-00113G 227.905 203.244 180 SOIC8
U13 EXCLUDES 242.210 181.294 180 QFP128
U3 IC-00276G 236.135 198.644 90 BGA48
U12 IC-00270G 250.610 201.594 0 SOP8
J1 INT-00112G 269.665 179.894 180 SOIC16
J2 INT-00112G 269.665 198.144 180 SOIC16
输出:
J6 INT-00113G 227.905 174.994 180
J3 INT-00113G 227.905 203.244 180
U13 EXCLUDES 242.210 181.294 180
U3 IC-00276G 236.135 198.644 90
U12 IC-00270G 250.610 201.594 0
J1 INT-00112G 269.665 179.894 180
J2 INT-00112G 269.665 198.144 180
答案 2 :(得分:1)
你不是说 不起作用..使用Lines属性你可以这样做:
richTextBox2.Lines = richTextBox2.Lines
.Select( l => string.Join(" ", l.Split(' ')
.Take(5)))
.ToArray();
如果仅 空格作为列之间的分隔符出现,这只会起作用。
答案 3 :(得分:1)
这个很容易阅读......
string data = "J6 INT-00113G 227.905 174.994 180 SOIC8\r\nJ3 INT-00113G 227.905 203.244 180 SOIC8\r\nU13 EXCLUDES 242.210 181.294 180 QFP128\r\nU3 IC-00276G 236.135 198.644 90 BGA48\r\nU12 IC-00270G 250.610 201.594 0 SOP8\r\nJ1 INT-00112G 269.665 179.894 180 SOIC16\r\nJ2 INT-00112G 269.665 198.144 180 SOIC16\r\n";
// Split on new line
string[] lines = data.Split(new string[] {"\r\n"}, int.MaxValue, StringSplitOptions.RemoveEmptyEntries);
StringBuilder result = new StringBuilder();
foreach (string line in lines)
{
// Find the last space in the line
int lastSpace = line.LastIndexOf(' ');
// delete the end of the string from the last space
string newLine = line.Remove(lastSpace);
// rebuild string using stringBuilder
result.AppendLine(newLine);
}
Console.WriteLine("Old List:");
Console.Write(data);
Console.WriteLine("New List:");
Console.Write(result);
}
这个可能接近O(n):
StringBuilder result = new StringBuilder();
string data = "J6 INT-00113G 227.905 174.994 180 SOIC8\r\nJ3 INT-00113G 227.905 203.244 180 SOIC8\r\nU13 EXCLUDES 242.210 181.294 180 QFP128\r\nU3 IC-00276G 236.135 198.644 90 BGA48\r\nU12 IC-00270G 250.610 201.594 0 SOP8\r\nJ1 INT-00112G 269.665 179.894 180 SOIC16\r\nJ2 INT-00112G 269.665 198.144 180 SOIC16\r\n";
// Split on new line
int startchar = 0;
int lastspace = 0;
for(int i = 0; i < data.Length - 1; i++)
{
char current = data[i];
if (current == ' ')
{
// remember last space
lastspace = i;
}
else if (current == '\n')
{
result.AppendLine(data.Substring(startchar, lastspace - startchar));
if(i != data.Length - 1)
{
startchar = i + 1;
lastspace = startchar;
}
}
}
Console.Write(result.ToString());
答案 4 :(得分:0)
你是唯一一个“知道问题”的人。不幸的是,你决定不告诉我们它是什么。 (奇怪的)。
我要做的是按原样解析每一行,然后使用LastIndexOf()
找到最后一个空格,然后在那里修剪字符串。 (可选)您可以将结果传递给Trim()
以删除任何尾随空格。
答案 5 :(得分:0)
假设你的线总是宽度相同,那么:
string parsed = richTextBox2.Text.Split('\n').
Select(l => l.Substring(41) + Environment.NewLine);
答案 6 :(得分:0)
您应该首先使用readline()逐行读取文件,然后使用split拆分每行。
答案 7 :(得分:0)
var myString = "I want to remove the last item";
var mySplitResult = myString.split(" ");
var lastitem = mySplitResult[mySplitResult.length-1]