1

単語に「#」が付いているファイルを読み込みたい 単語からこれを削除したい
入力ファイル

a, 00001740, 0.125, 0,     able#1
a, 00001740, 0.125, 0,     play#2
a, 00002098, 0,     0.75,  unable#1

私はこれを次の形式で望んでいます#
出力はこれでなければなりません

a, 00001740, 0.125,  0,      able
a, 00001740, 0 .125, 0,      play
a, 00002098, 0,      0.75,   unable

私は次のコードを書きます

TextWriter tw = new StreamWriter("D:\\output.txt");
private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {

                StreamReader reader = new StreamReader("D:\\input.txt"); 
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    Regex expression = new Regex(@"\b\w+(?=#\d*\b)");
                    var results = expression.Matches(reader.ToString())
                    foreach (Match match in results)
                    {


                        tw.Write(match);

                    }
                    tw.Write("\r\n");
                }
                tw.Close();
                reader.Close();
            }
            textBox1.Text = "";                    
        }
    }
4

5 に答える 5

1

使用するRegex.Replace()

string result = Regex.Replace(input, "#.*", "");
于 2013-03-02T12:29:19.167 に答える
0

ファイルのコンテンツ全体を読み取ってキャッシュしたくない場合は、元のファイルのコンテンツを読み取っているときにファイルを書き換えているため、他のファイルに書き込むことをお勧めします。

また、次の例を検討してください。

int index = line.IndexOf("#");
if (index != -1)
{
    line = line.Substring(0, index - 1);
}

ここでは正規表現を処理する必要がないため、これははるかに高速に実行されます。

于 2013-03-02T12:37:29.997 に答える
0

コード全体を 3 行で置き換えることができます。

string txt = File.ReadAllText("D:\\input.txt");
txt = Regex.Replace(txt, "#.*?(\r\n|\n|$)", "$1");
File.WriteAllText("D:\\output.txt", txt);
于 2013-03-02T12:44:14.777 に答える
0

ここでは、正規表現の置換がおそらく最善の策です。

 File.WriteAllLines("c:\\output.txt", File.ReadAllLines("c:\\input.txt").Select(line => Regex.Replace(line, "#.*","")));

あるいはもしかしたらTakeWhile

File.WriteAllLines("c:\\test24.txt", File.ReadAllLines("c:\\test.txt").Select(line => new string(line.TakeWhile(c => c != '#').ToArray())));
于 2013-03-02T12:48:47.237 に答える
0

私のコメントに従ってこれを試してください:

        string s = "a, 00001740, 0.125, 0,     able#1";
        string m = Regex.Replace(s, @"#\d$", ""); 
        //for more than one digit  @"#\d+$"
        Console.WriteLine(m);
        Console.ReadLine();
于 2013-03-02T12:50:01.947 に答える