-7

別のディレクトリにある多くの .txt ファイルに .txt ファイルを分割する必要があります。

例: テキスト ファイルの最初の単語は「Dipendent」で、次の「dipendent」に到達すると、ファイルを切り取って、別のディレクトリにある別の .txt ファイルにテキストのその部分のコピーを作成する必要があります。

したがって、最初の単語「dipendent」から次の「dipendent」までの .txt ファイルを作成する必要があります (私のファイルには約 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

あなたのコードを書いてくれる人にお願いする習慣をつけないでください。
ただし、あなたをコミュニティに歓迎するために: (ファイルを開いたり閉じたりするコードをより安全にする必要があります。)

    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 に答える