C # - String.Split () Удалить последний элемент - PullRequest
3 голосов
/ 26 июля 2011

У меня есть 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(' ') каждая строка, которая уже разделена?

Ответы [ 8 ]

7 голосов
/ 26 июля 2011

Это может работать (не проверено):

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);
3 голосов
/ 26 июля 2011

Это макет с фиксированной шириной, поэтому вы можете достичь желаемого, просто обрезав все содержимое справа от пятого столбца:

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  
1 голос
/ 26 июля 2011

Это довольно легко читать ....

        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());
1 голос
/ 26 июля 2011

Вы не говорите , что не работает ... используя свойство Lines, вы можете сделать что-то вроде этого:

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

Это будет работать, конечно, только если пробел только является разделителем между столбцами.

0 голосов
/ 16 декабря 2015
var myString = "I want to remove the last item";
var mySplitResult = myString.split(" ");
var lastitem =  mySplitResult[mySplitResult.length-1] 
0 голосов
/ 26 июля 2011

Вы, вероятно, должны сначала прочитать файл за строкой, используя readline (), а затем разделить каждую строку с помощью split.

0 голосов
/ 26 июля 2011

Предполагая, что ваши строки всегда имеют одинаковую ширину:

string parsed = richTextBox2.Text.Split('\n').
         Select(l => l.Substring(41) + Environment.NewLine);
0 голосов
/ 26 июля 2011

Вы единственный, кто "знает проблему". К сожалению, вы решили не говорить нам, что это такое. (Странно.)

Что бы я сделал, это проанализировал каждую строку как есть, а затем использовал LastIndexOf(), чтобы найти последний пробел, и просто обрезал строку там. При желании вы можете передать результат в Trim(), чтобы удалить пробелы в конце.

...