0

このようなテキストファイル(.txt)があります

ダイアログ: 0,0:00:01.99,0:00:03.84,デフォルト,,0000,0000,0000,,さあ、どうぞ!

Dialogue: 0,0:00:03.84,0:00:06.31,Default,,0000,0000,0000,,そしてまた!

Dialogue: 0,0:01:42.92,0:01:44.91,Default,,0000,0000,0000,,少々お待ちください。

このようにそのファイルに「{」と「}」を挿入したい

ダイアログ: 0,0:00:01.99,0:00:03.84,デフォルト,,0000,0000,0000,,{さあ、どうぞ!}

Dialogue: 0,0:00:03.84,0:00:06.31,Default,,0000,0000,0000,,{そしてまた!}

Dialogue: 0,0:01:42.92,0:01:44.91,Default,,0000,0000,0000,,{ちょっと待って。}

これらのコードを使用して、最後に「}」を挿入することができました

            String path = openFileDialog1.FileName;
            List<string> line = new List<string>();
            StreamReader sr = new StreamReader(path);
            StringBuilder sb = new StringBuilder();
            String lines;

            while ((lines = sr.ReadLine()) != null)
            {
                line.Add(lines+"}");
            }

            foreach (string s in line)
            {
                sb.AppendLine(s);
            }

「0000,,」の直後に「{」を挿入したい。私のEngのために申し訳ありませんが、あなたの助けに感謝します.

4

5 に答える 5

1
        while ((lines = sr.ReadLine()) != null)
        {
           var index = line.LastIndesOf(",,") + 2;
           lines = lines.Insert(index, "{"); 

           line.Add(lines+"}");                
        }   
于 2012-07-04T06:15:47.130 に答える
1

ダイアログの前に 9 つのカンマ区切りのセクションがフォーマットに含まれていると仮定します。

string InsertBrackets(string input)
{
    var idx = -1;
    for (int i = 0; i < 9; i++)
        idx = input.IndexOf(",", idx + 1);

    return input.Insert(idx + 1, "{") + "}";
}

必要に応じて、ハードコーディングして 9 にする代わりに、セクション数をパラメーターとして渡すこともできます。もちろん、いくつかのエラーチェックを追加します。

于 2012-07-04T06:26:27.140 に答える
0

これがideoneの実例です。

要するに、これは中括弧を追加する関数です(この解決策は、常に同じ数のフィールドがコンマで区切られ、最後のフィールドのみがコンマを持つ可能性があるという事実に依存します):

   public static string AddBraces(string u) {
            string[] words = u.Split(',');
            string res = words[0];
            words[9] = "{" + words[9];
            for (int i = 1; i < words.Length;++i) {
                    res = res + ',' + words[i];
            }
            res = res + "}";
            return res;
    }
于 2012-07-04T06:18:18.087 に答える
0

変更するテキストの直前に常に2つのコンマがあると仮定すると(コメントからはそうです)、次のように試すことができます。

        String str = "Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,Up you go!";
        String newStr = Regex.Replace(str, "(.*,,)(.*)$", "$1{$2}");
        System.Console.WriteLine(str);
        System.Console.WriteLine(newStr);
        System.Console.ReadKey();

これにより、次のようになります。

Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,Up you go!
Dialogue: 0,0:00:01.99,0:00:03.84,Default,,0000,0000,0000,,{Up you go!}

この正規表現:(.*,,)(.*)$2つのグループに一致します。最初のグループには、最後の2つのコンマまでの文字列の先頭が含まれます。2番目のグループには、最後の2つのコンマの後のテキストが含まれ、文字列の最後まで一致し続けます。

このセクションでは、指定された文字列を最初に一致したグループ、次にa 、次に2番目に一致したグループ、その後に."$1{$2}"を置き換えます。{}

于 2012-07-04T06:19:39.500 に答える
0

なんかサブタイトルっぽい。

その場合、,遭遇した数を数えることができます。残りはテキストダイアログで、 で囲むことができます{}

C# で書いていませんが、文字列を正規表現で分割できる関数があるはずです。これを使用してコンマ,に沿って分割し、分割数の制限を指定します (この場合、区切り文字の数は 9 です)。次に、最後のトークンを で囲み{}、文字列を再び結合します。

于 2012-07-04T06:13:57.093 に答える