0

あなたの助けが必要です。

問題は、私のコードが機能することです。96 個のテキスト ファイルであるフォルダー内のすべてのファイルを読み取り、各ファイルのパスを保存します。次に、各ファイルを取得して、テキスト ファイルの行番号 32 を変更します。これは "Treatment";"1"; です。nr = 1,2,3,4,5,...,96。私のプログラムは、この文字列を取得して別の文字列に置き換えます。たとえば、最初のファイルを "Treatment";"100"; に変更します。最後のファイルは "Treatment";"196"; である必要があります。

これを解決するために、行全体を新しいものに変更します。しかし、文字列に番号を書き込むと、最初のファイルは 1 から開始したときに正しくなりますが、ファイル 2 ~ 10 は正しくなります。12,23,34,45,56,67,78,89 の場合、11 番目のファイルから 2,3,4,5,6,7 を開始します。

どうしてこれなの?私のコードは以下です。

どういうわけかASCIIテーブルにアクセスしていたので、整数を文字列として保存しようとしました。しかし、それは同じように機能するので、私のコードはアイデアの下にありますか?

    private void button1_Click(object sender, EventArgs e)
    {

        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {

            int start = 1;
            string strengur = "\";";
            string myString = start.ToString();

            string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
            //foreach (var file in Directory.EnumerateFiles(folderBrowserDialog1.SelectedPath))
            for(int i = 0; i < 96 ; i++){

                var lines = File.ReadAllLines(filePaths[i]);
                lines[31] = "\"Treatment!!\";\"" +myString +strengur;
                File.WriteAllLines(filePaths[i], lines);
                start += 1;
                myString = start.ToString();
           }
        }
  }

宜しくお願いします SæþórÓlafurPétursson

4

1 に答える 1

1

これらすべてのファイルを Windows エクスプローラーで表示し、名前で並べ替えると、その理由がわかります。

それを解決するには、各ファイルの現在の番号にstart基づいて を設定し、 で追加します。例えば:line31100

 private void button1_Click(object sender, EventArgs e)
        {
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                string strengur = "\";";
                string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
                foreach(var file in filePaths)
                {
                    var lines = File.ReadAllLines(file);
                    int currentstart = int.Parse(lines[31].Split(';')[1].Trim('\"'));
                    lines[31] = "\"Treatment!!\";\"" + (currentstart+100).ToString() + strengur;
                    File.WriteAllLines(file, lines);
                }
            }
        }

コメントに基づいて編集します。

 private void button1_Click(object sender, EventArgs e)
    {
        DialogResult result = folderBrowserDialog1.ShowDialog();
        if (result == DialogResult.OK)
        {
            int start = 100; //set this to your user's input
            string strengur = "\";";
            string[] filePaths = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
            foreach(var file in filePaths)
            {
                var lines = File.ReadAllLines(file);
                int currentstart = int.Parse(lines[31].Split(';')[1].Trim('\"'));
                lines[31] = "\"Treatment!!\";\"" + (currentstart+start-1).ToString() + strengur;
                File.WriteAllLines(file, lines);
            }
        }
    }
于 2013-09-10T09:55:52.667 に答える