C # - найти / редактировать / заменить строку - PullRequest
1 голос
/ 26 июля 2011

Я пытаюсь извлечь данные из файла, чтобы изменить его и заменить старые данные.

У меня есть файл, который выглядит примерно так:

TEXT  NEXT_TEXT  10.505   -174.994 0  
TEXT  NEXT_TEXT  100.005  174.994  90  
TEXT  NEXT_TEXT  -10.000  -5.555   180  
TEXT  NEXT_TEXT  -500.987 5.123    270  
TEXT  NEXT_TEXT  987.123  1.000    180  
TEXT  NEXT_TEXT  234.567  200.999  90 

Я пытаюсьвозьмите 3-й и 4-й столбцы , чтобы изменить данные в зависимости от того, что пользователь вводит в два TextBoxes.Давайте обозначим 3-й столбец "X" и 4-й столбец "Y" .При этом есть также два текстовых поля, помеченные "xTextBox" и "yTextBox" .Эти текстовые поля позволяют пользователю вводить числа и число, которое они вводят в (положительное, отрицательное и / или десятичное число до 3 десятичных знаков) для каждого текстового поля (X и Y) будет ДОБАВЛЕНО к значениям столбца "X" и значениям столбца "Y".

Сейчас я использую этот КОД (ниже) для удалениястолбцы «X» и «Y» и отображают их значения в различных RichTextBoxes помеченных xRichTextBox и yRichTextBox .

Итак, xRichTextBox выглядит следующим образом:

10.505
100.005
-10.000
-500.987
987.123
234.567

и yRichTextBox выглядит так:

-174.994
174.994
-5.555
5-123
1.000
200.999

КОД:

    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");
            }
        });
    }

SO например, если пользователь вводит в "10.005" для xTextBox и "- 20" для yTextBox обновляется xRichTextBox будет выглядеть следующим образом:

20.510
110.010
0.005
-490.982
997.128
224.572

, а updated yRichTextBox будет выглядеть так:

-194.994
154.994
-25.555
-14.877
-19.000
180.999

После того, как это произойдет, Я пытаюсь заменить 3-й и 4-й столбцы исходного файла обновленными значениями.

  • В настоящее время я получаю значения ("X" и "Y")в файл и вывод их для разделения RichTextBoxes, но я не знаю, как добавить эти значения к значениям, введенным в каждый TextBox ... Как я могу это сделать?
  • После RichTextBox значения рассчитываются со значениями TextBox, как я могу взять эти новые значения и добавить тПодшить к оригинальному файлу?

** Эти значения не всегда одинаковы, иначе я бы их жестко закодировал.


Итак,новый файл будет выглядеть так:

TEXT  NEXT_TEXT  20.510   -194.994 0  
TEXT  NEXT_TEXT  110.010  154.994  90  
TEXT  NEXT_TEXT  0.005    -25.555  180  
TEXT  NEXT_TEXT  -490.982 -14.877  270  
TEXT  NEXT_TEXT  997.128  -19.000  180  
TEXT  NEXT_TEXT  224.572  180.999  90 

Ответы [ 3 ]

1 голос
/ 26 июля 2011

Вы знаете, как читать файлы, но звучит так, как будто вы просто помещаете их прямо в текстовые поля. Я бы создал объект для представления строки (с x, y и любым последним столбцом). Когда вы прочитаете их, создайте список объектов. Чтобы отобразить их, пролистайте и выберите каждый x (это легко сделать с помощью linq, если вы используете 4.0) и каждый y для отдельных. Для обновления выполните цикл и добавьте соответствующий номер для каждого объекта. Затем, чтобы сохранить, просто запишите каждый объект снова.

Редактировать: После более тщательного изучения вашего кода вы сохраняете список X и Y. Создайте объект, о котором я упоминал, и сохраните только его список.

1 голос
/ 26 июля 2011

Я предлагаю использовать синтаксический анализатор структурированного текста для анализа и перезаписи файла.

В пространстве имен Microsoft.VisualBasic.FileIO есть один, TextFieldParser.Это нормальная сборка .NET, поэтому вы можете ссылаться на нее в своем коде и использовать из C #.

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

перед сохранением даты обязательно создайте строку данных для сохранения, а затем, используя textwriter или streamwriter, снова сохраните все содержимое в файл. Я не думаю, что вы сможете изменить только одну часть файла и сохранить его

...