1

ファイルからデータを取得して変更し、古いデータを置き換えようとしています。

次のようなファイルがあります。

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 

ユーザーが2つに入力した内容に基づいてデータを変更するために、 3番目と4番目の列を取得しようとしていますTextBoxes3 番目の列 「X」4 番目の列 「Y」にラベルを付けましょう。これにより、 "xTextBox""yTextBox "というラベルの付いた2 つのTextBoxもあります。これらのテキスト ボックスでは、ユーザーが数値を入力できます。各テキスト ボックス (X および Y)に入力した数値(正、負、および/または小数点以下 3 桁までの小数) は、"X" 列の値に追加され、 「Y」列の値。

現在、このCODE (以下) を使用して "X" 列と "Y" 列を削除し、それらの値を異なるRichTextBoxesラベルの xRichTextBoxyRichTextBoxに表示しています。

したがって、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");
            }
        });
    }

たとえば、ユーザーが に「10.005」入力、更新されxTextBoxたに「-20」をようになります。yTextBox xRichTextBox

20.510
110.010
0.005
-490.982
997.128
224.572

更新され たものは次のyRichTextBoxようになります。

-194.994
154.994
-25.555
-14.877
-19.000
180.999

これが行われた後、元のファイルの3 番目と 4 番目の列を更新された値に置き換えようとしています。

  • 現在、ファイル内の値 (「X」と「Y」) を取得して個別RichTextBoxesに出力していますが、これらの値をそれぞれから入力された値に追加する方法がわかりませんTextBox...どうすればこれを行うことができますか?
  • 「TextBox」値を使用して値が計算された後、RichTextBoxこれらの新しい値を取得して元のファイルに追加するにはどうすればよいですか?

**これらの値は常に同じであるとは限りません。


したがって、新しいファイルは次のようになります。

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 
4

3 に答える 3

1

構造化テキスト ファイル パーサーを使用してファイルを解析し、書き換えることをお勧めします。

Microsoft.VisualBasic.FileIO名前空間にはTextFieldParser. これは通常の .NET アセンブリであるため、コードで参照して C# から使用できます。

于 2011-07-26T19:52:49.613 に答える
1

ファイルの読み方はわかっていますが、テキスト ボックスに直接入力しているように聞こえます。線を表すオブジェクトを作成します (x、y、および最後の列が何であれ)。それらを読み込んだら、オブジェクトのリストを作成します。それらを表示するには、ループして各 x (4.0 を使用している場合は linq で簡単に実行できます) を選択し、個別のものに対して各 y を選択します。更新するには、ループして各オブジェクトに適切な番号を追加します。次に、保存するには、各オブジェクトをもう一度書き出すだけです。

編集: コードをより注意深く調べた後、X のリストと Y のリストを保持しています。私が言及したオブジェクトを作成し、それらのリストのみを保持します。

于 2011-07-26T19:55:26.203 に答える
0

日付を保存する前に、必ず保存するデータの文字列を作成し、テキストライターまたはストリームライターを使用してすべてのコンテンツをファイルに再度保存してください。ファイルの一部だけを変更して保存することはできないと思います

于 2011-07-26T19:55:42.460 に答える