1

私のプロジェクトは現在、コメントを表すため、-記号の後のすべてのテキストを削除するように設定されています。私のコードは、コメントの前にある、テキストファイル内のテキスト内のすべてのテキストを削除しています。

これまでの私のコードは次のとおりです。

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath( Environment.SpecialFolder.Desktop );
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );

        using (StreamReader reader = new StreamReader( text ))
        {
            using (StreamWriter writer = new StreamWriter( file ))
            {
                while (( line = reader.ReadLine() ) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        File.WriteAllText( file, File.ReadAllText( text ).Replace( line_to_delete, "" ) );
                    continue;
                }
            }

teThanksのみを削除する必要があることをどのように指定できますか

4

3 に答える 3

2

RegExまたは次のコードを使用できます

var @index = line.IndexOf(line_to_delete);
if(@index != -1){
    var commentSubstring = line.Substring(@index, line.Length - @index); //Contains only the comments
    line.Replace(commentSubstring, "").ToString()//Contains the original with no comments
}

コメントが下のレイアウトにある場合

何とか何とか-いくつかのコメント-より多くのコメント

adasdasd asfasffa

asasff-その他のコメント

于 2012-05-16T12:49:54.753 に答える
2

s.indexOFは、初めて「-」が使用されたときに検索します。s.removeはindexofから始まり、最後まですべてを削除します。 編集: ジェイズのコメントによる例外を修正

        string s = "aa--aa";
        int i = s.IndexOf("--");
        if (i >= 0)
            s = s.Remove(i);
        MessageBox.Show(s);

またはここに私はあなたのためにそれを並べました

        string s = "aa--aa";
        s = s.IndexOf("--") >= 0 ? s.Remove(s.IndexOf("--")) : s;
于 2012-05-16T12:53:50.093 に答える
1

コードの問題は、ファイルに「-」と正確に等しい行が含まれている場合にのみ、置換(およびこれが出力ファイルに書き込む唯一の命令)が発生するという事実です。

さらに、WriteAllTextとReadAllTextを使用している場合は、whileループは必要ありません。この方法では、「-」のみが削除され、その後に続くすべてのものは削除されないため、とにかく使用できません。

私はこのようなものがうまくいくはずだと思います:

using (StreamReader reader = new StreamReader( text ))
{
    using (StreamWriter writer = new StreamWriter( file ))
    {
        while (( line = reader.ReadLine() ) != null)
        {
            int idx = line.IndexOf(line_to_delete);
            if (idx == 0) // just skip the whole line
                continue;
            if (idx > 0)
                writer.WriteLine(line.Substring(0, idx));
            else
                writer.WriteLine(line);
        }
    }
}
于 2012-05-16T13:17:55.123 に答える