0

我有一个像这样的文本文件(.txt)

对话:0,0:00:01.99,0:00:03.84,默认,,0000,0000,0000,,你去!

对话:0,0:00:03.84,0:00:06.31,Default,,0000,0000,0000,,再一次!

对话:0,0:01:42.92,0:01:44.91,默认,,0000,0000,0000,,等一下。

我想像这样将“{”和“}”插入该文件

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

对话:0,0:00:03.84,0:00:06.31,Default,,0000,0000,0000,,{还有,再来一次!}

对话: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,," 之后插入 "{"。对不起我的英语,谢谢你的帮助。

4

5 回答 5

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 回答
1
        while ((lines = sr.ReadLine()) != null)
        {
           var index = line.LastIndesOf(",,") + 2;
           lines = lines.Insert(index, "{"); 

           line.Add(lines+"}");                
        }   
于 2012-07-04T06:15:47.130 回答
0

这似乎是某种字幕。

在这种情况下,您可以只计算,遇到的数量。其余的是文本对话,您可以用{}.

我不是用 C# 编写的,但应该有一个函数可以让您通过正则表达式拆分字符串。只需使用它沿逗号分割,,并指定分割数的限制(在本例中,分隔符的数量为 9)。然后选择最后一个用 包围的标记{},并将字符串连接回来。

于 2012-07-04T06:13:57.093 回答
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

假设您在要更改的文本之前总是有两个逗号(从您的评论来看似乎是这种情况),您可以尝试这样的事情:

        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!}

这个正则表达式:(.*,,)(.*)$将匹配两个组。第一组将包含字符串的开头,直到最后两个逗号。第二组将包含最后两个逗号之后的文本,并一直匹配到字符串的末尾。

"$1{$2}"部分将用第一个匹配的组替换给定的字符串,然后是 a {,然后是第二个匹配的组,然后是 a }

于 2012-07-04T06:19:39.500 回答