3

我有一个加载了如下文件的 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(' ')已经拆分的每一行?

4

8 回答 8

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);
于 2011-07-25T22:47:51.137 回答
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  
于 2011-07-25T22:48:51.553 回答
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());
于 2011-07-25T22:58:22.863 回答
1

你不是说什么不起作用..使用 Lines 属性你可以做这样的事情:

richTextBox2.Lines = richTextBox2.Lines
                                 .Select( l => string.Join(" ", l.Split(' ')
                                                     .Take(5)))
                                 .ToArray();

当然,这只有在空格作为列之间的分隔符出现时才有效。

于 2011-07-25T22:44:32.490 回答
0

你是唯一一个“知道问题”的人。不幸的是,你决定不告诉我们它是什么。(奇怪的。)

我要做的是按原样解析每一行,然后用它LastIndexOf()来查找最后一个空格,然后修剪那里的字符串。或者,您可以将结果传递Trim()给以删除任何尾随空格。

于 2011-07-25T22:45:22.903 回答
0

假设你的线条总是相同的宽度,那么:

string parsed = richTextBox2.Text.Split('\n').
         Select(l => l.Substring(41) + Environment.NewLine);
于 2011-07-25T22:46:39.707 回答
0

您可能应该首先使用 readline() 逐行读取文件,然后使用 split 拆分每一行。

于 2011-07-25T22:49:21.583 回答
0
var myString = "I want to remove the last item";
var mySplitResult = myString.split(" ");
var lastitem =  mySplitResult[mySplitResult.length-1] 
于 2015-12-16T06:51:00.907 回答