我必须在不同目录中的许多 .txt 文件中拆分一个 .txt 文件。
例如:当我到达下一个“dipendent”时,我的文本文件的第一个单词是“Dipendent”,我必须剪切文件并将该部分文本复制到另一个目录中的另一个 .txt 文件中。
所以我需要创建一个 .txt 文件,从第一个单词“dipendent”到下一个“dipendent”(在我的文件中大约有 50 个“dipendent”,我必须为每个文本部分创建一个 .txt 文件) .
我必须在不同目录中的许多 .txt 文件中拆分一个 .txt 文件。
例如:当我到达下一个“dipendent”时,我的文本文件的第一个单词是“Dipendent”,我必须剪切文件并将该部分文本复制到另一个目录中的另一个 .txt 文件中。
所以我需要创建一个 .txt 文件,从第一个单词“dipendent”到下一个“dipendent”(在我的文件中大约有 50 个“dipendent”,我必须为每个文本部分创建一个 .txt 文件) .
你可以使用:
Regex.Split(myString,"Dipendent")
或者
myString.Split(new [] {"Dipendent"}, StringSplitOptions.None);
你也可以看看 String.Substring(Startindex, length)
编辑:应该刷新我的页面 - wudzik 是对的。
您可以使用这种使用有效字符串方法的方法:
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]);
}
不要养成要求 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();
}
}