2

アルファベット順に並べ替えられた既存の .txt ファイルがあります。既存の .txt ファイルに 3 つの新しいパラメーターをアルファベット順に挿入したいと考えています。基本的に、.txt ファイルのアルファベット順が維持されるように、間に新しい値を追加する必要があります。

誰でも私を助けてもらえますか?どうすればこれを進めることができますか?

4

4 に答える 4

4

これを「マージソート」と呼ぶことができます。私はすぐに 2 つの方法を考えることができます。

  1. 元のファイルを一度に 1 行ずつ読み取り、新しいファイルに出力して、正しいポイントにコンテンツを追加します。

  2. ファイル全体をコレクションに読み取り、新しいエントリをコレクションに追加し、コレクションが何らかの方法でソートされていることを確認して (または、本質的にソートされているコレクション タイプを使用)、コレクション全体をファイルに書き戻します。

私がしないことは、ファイル内のスペースを開いて、新しいエントリをファイルに直接挿入しようとすることです。

于 2012-12-13T03:15:52.393 に答える
1

パフォーマンスが実際には問題ではなく、ファイルをメモリにロードできると仮定すると、次のことができます。

var newLines = new [] { "new line one", "new line two", "new line three" };

var lines = File.ReadAllLines(filename);

lines = lines.Append(newLines).OrderBy(line => line).ToArray();

File.WriteAllLines(filename, lines);
于 2012-12-13T03:17:02.680 に答える
1

これはおそらくテキスト ファイルのサイズによって異なりますが、テキスト ファイルを次のように読み取ります。

List<string> items = GetItemsFromTextFile(); //you're going to use IOStreams for this

新しいアイテムを挿入します。

items.add("new item 1");
items.add("new item 2");
items.add("new item 3");

並べ替え:

items.Sort();

それからそれを書きます。

于 2012-12-13T03:16:02.090 に答える
0

StreamReaderまたはを初期化してFile.ReadAllLines(string path, Encoding encoding)、ファイルの内容をstring新しい行で分割された配列に読み込むことができます。string次に、この配列をソートして、配列内のそれぞれをファイルに書き戻します。

public static void WriteToFile(string[] linesContent, string fileLocation) //Creates a void of name WriteToFile(string[] linesContent, string fileLocation) where linesContent are the lines to write and fileLocation is the target file path to write to
{
    StreamWriter _writer = new StreamWriter(fileLocation); //Initialize a new StreamWriter of name _writer to write to fileLocation
    foreach (string s in linesContent) //Get s as a string for every string in linesContent
    {
        _writer.WriteLine(s); //Write s in a new line to the file
    }
    _writer.Close(); //Close the writer
}
public static void SortFile(string fileLocation) //Creates a void of name SortFile(string fileLocation) where fileLocation is the path of the file to sort alphabetically
{ 
    string[] Lines = File.ReadAllLines(fileLocation, Encoding.UTF8); //Initializes a string array of name Lines as the content of the file splitted by Environment.NewLine
    Array.Sort(Lines); //Sorts the string array of name Lines
    WriteToFile(Lines, fileLocation); //Writes Lines to the file
}
static void Main() //Our main entry point
{
    string fileLocation = @"D:\Resources\myfile.txt"; //Initializes a new string of name fileLocation as D:\Resources\myfile.txt
    WriteToFile(new string[] { "my third line", "this is my second line", "and this is my first line" }, fileLocation); //Writes the three lines provided to fileLocation
    SortFile(fileLocation); //Sorts fileLocation
}

注意: newStreamWriterの nameを初期化する際に、新しいソート行でファイルを上書きするため、 を 設定し_writerませんでしappendtrue
StreamReader.ReadToEnd();StreamReader

public static void SortFile(string fileLocation) //Creates a void of name SortFile(string fileLocation) where fileLocation is the path of the file to sort alphabetically
{ 
    StreamReader _reader = new StreamReader(fileLocation); //Initializes a new StreamReader of name _reader to read from fileLocation

    string fileContents = _reader.ReadToEnd(); //Initializes a new string of name fileContents which is the file content 
    string[] Lines = fileContents.Split(Environment.NewLine.ToCharArray()[0]); //Initializes a string array which is the output of splitting fileContents by a line

    Array.Sort(Lines); //Sorts the string array of name Lines
    _reader.Close(); //Closes the StreamReader so that the file can be accessible once again
    WriteToFile(Lines, fileLocation); //Writes Lines to the file
}

ありがとう、
これがお役に立てば幸いです:)

于 2012-12-13T03:42:02.217 に答える