-7

我必须在不同目录中的许多 .txt 文件中拆分一个 .txt 文件。

例如:当我到达下一个“dipendent”时,我的文本文件的第一个单词是“Dipendent”,我必须剪切文件并将该部分文本复制到另一个目录中的另一个 .txt 文件中。

所以我需要创建一个 .txt 文件,从第一个单词“dipendent”到下一个“dipendent”(在我的文件中大约有 50 个“dipendent”,我必须为每个文本部分创建一个 .txt 文件) .

4

3 回答 3

2

你可以使用:

Regex.Split(myString,"Dipendent")

或者

myString.Split(new [] {"Dipendent"}, StringSplitOptions.None);

你也可以看看 String.Substring(Startindex, length)

编辑:应该刷新我的页面 - wudzik 是对的。

于 2013-07-24T09:37:20.590 回答
1

您可以使用这种使用有效字符串方法的方法:

public static List<string> GetParts(string text, string token, StringComparison comparison, bool inclToken)
{
    List<string> items = new List<string>();
    int index = text.IndexOf(token, comparison);
    while (index > -1)
    {
        index += token.Length;
        int endIndex = text.IndexOf(token, index, comparison);
        if (endIndex == -1)
        {
            string item = String.Format("{0}{1}", inclToken ? token : "", text.Substring(index));
            items.Add(item);
            break;
        }
        else
        {
            string item = String.Format("{0}{1}{0}", inclToken ? token : "", text.Substring(index, endIndex - index));
            items.Add(item);
        }
        index = text.IndexOf(token, endIndex, comparison);
    }
    return items;
}

然后以这种方式使用它:

var fileText = File.ReadAllText(oldPath);
var items = GetParts(fileText, "Dipendent", StringComparison.OrdinalIgnoreCase, true);

现在您拥有所有零件,您可以为每个零件生成新文件。

for (int i = 0; i < items.Count; i++)
{
    var fileName = string.Format("Dipendent_{0}.txt", i + 1);
    var fullPath = Path.Combine(destinationDirectory, fileName);
    File.WriteAllText(fullPath, items[i]);
}
于 2013-07-24T09:50:43.567 回答
0

不要养成要求 ppl 编写代码的习惯,
但是,为了欢迎您加入社区:(您应该使代码更安全地打开和关闭文件。)

    public void Texts(FileInfo srcFile, DirectoryInfo outDir, string splitter = "dipendent")
    {
        // open file reader
        using (StreamReader srcRdr = new StreamReader(srcFile.FullName))
        {
            int outFileIdx = 1;
            StreamWriter outWriter = new StreamWriter(outDir.FullName + srcFile.Name + outFileIdx + ".txt");

            while (!srcRdr.EndOfStream)  //  read lines one by one untill ends
            {
                string readLine = srcRdr.ReadLine();
                int indexOfSplitter = readLine.IndexOf(splitter, StringComparison.Ordinal); // find splitter
                if(indexOfSplitter >= 0) // if there is a splitter
                {
                    outWriter.WriteLine(readLine.Substring(indexOfSplitter)); // write whats before...

                    //outWriter.WriteLine(readLine.Substring(indexOfSplitter) + splitter.Length); // use if you want splitting text to apear in the end of the previous file

                    outWriter.Close(); // close the current file
                    outWriter.Dispose();

                    // update the Text to be written to exclude what's already written to the current fils
                    readLine = readLine.Substring(indexOfSplitter); 
                    //readLine = readLine.Substring(indexOfSplitter + splitter.Length);  // Use if you want splitting text to apear in the new file

                    // OPEN NEXT FILE
                    outFileIdx++; 
                    outWriter = new StreamWriter(outDir.FullName + srcFile.Name + outFileIdx + ".txt");
                }
                outWriter.WriteLine(readLine);
            }

            outWriter.Close();
            outWriter.Dispose();
        }
    }
于 2013-07-24T11:09:06.087 回答