0

次のような行があります。

114765 * 3 * 659300 * 01 * 17/01/2013 * * 1 * Chuck Norris * Chuck Norris Jr* Owner * 1 * 28/04/1983 * Conjuge * * * 16/1/2013 * 1 * Quadro Social *

ご覧のとおり、コンテンツ/フィールドは、フィールドなどで区切られ*ています matriculation, name, dependent's name, category...どうすれば1つずつ「読む」ことができるか知りたいですか?

また、これを並べ替えて、新しい file.txt を作成する必要があります。これらのコンテンツは並べ替えられ、*... 完全に失われました。
それを読んで削除した後、次の*ように置き換える必要があります\field\\114765\\3\\659300\\01\\17/01/2013\\1\\Chuck Norris\ 試しsubstring()てみましStreamWriter StreamReader ReadLineたが、必要なことを実行できませんでした;\

4

4 に答える 4

3

String.Split列のを取得するために使用しstring[]ます。String.Joinすべてのパーツを新しい文字列に結合しFile.WriteAlltextたりFile.WriteAllLines 、書き戻したりするために使用できます。

それを読んで削除した後、* \field\のように置き換える必要があります。

*したがって、を次のように置き換える必要があります\

string[] parts = line.Split(new[] { '*' }, StringSplitOptions.RemoveEmptyEntries);
string newLine = string.Join("", parts.Select(p => string.Format("\\{0}\\", p.Trim())));
File.WriteAllText(filePath, newLine);

デモ

結果:

\114765\\3\\659300\\01\\17/01/2013\\\\1\\Chuck Norris\\Chuck Norris Jr\\Owner\\1\\28/04/1983\\Conjuge\\\\\\16/1/2013\\1\\Quadro Social\\\

更新

空の部分(文字列内で2つ連続* *しているため)を無視する場合は、次のコードを使用できます。

var nonEmptyParts = parts
    .Where(p => !string.IsNullOrWhiteSpace(p))
    .Select(p => string.Format("\\{0}\\", p.Trim()));
string newLine = string.Join("", nonEmptyParts);

その結果、次のようになります。

\114765\\3\\659300\\01\\17/01/2013\\1\\Chuck Norris\\Chuck Norris Jr\\Owner\\1\\28/04/1983\\Conjuge\\16/1/2013\\1\\Quadro Social\

配列の最初の2つの文字列を無視したいのですが、削除して破棄するだけです。

つまりEnumerable.Skip

var nonEmptyParts = parts.Skip(2)
    .Where(p => !string.IsNullOrWhiteSpace(p))
    .Select(p => string.Format("\\{0}\\", p.Trim()));
于 2013-01-30T12:47:56.147 に答える
1

readline は、テキスト ファイルから 1 行を読み取るために必要なものです。その行全体を文字列にしたら、Split メソッドを使用します。

line.Split('*');

文字列の配列を提供します。

于 2013-01-30T12:41:48.270 に答える
0

ファイル内の行を並べ替えるためにこれはどうですか? fieldToSortBy の値を変更して、他の数値フィールドで並べ替えるだけです。

using System.IO;
using System.Linq;

namespace FileSorter
{
    class Program
    {
        static void Main(string[] args)
        {
            var fieldToSortBy = 0;

            //data.txt contains lines like 114765 * 3 * 659300 * 01 * 17/01/2013 * * 1 * Chuck Norris * Chuck Norris Jr* Owner * 1 * 28/04/1983 * Conjuge * * * 16/1/2013 * 1 * Quadro Social *
            var lines = File.ReadAllLines(@"C:\temp\data.txt");
            var splitLines = lines.Select(l => l.Split('*'));
            var orderedLines = splitLines.OrderByDescending(l => int.Parse(l[fieldToSortBy].Trim()));
            var joinedLines = orderedLines.Select(l => string.Join("*", l));
            File.WriteAllLines(@"C:\temp\output.txt", joinedLines);
        }
    }
}
于 2013-01-30T12:52:37.093 に答える
0

一度に1行ずつファイルを読み込んでから使用します

myLine.split('*');

これにより、文字列が配列に分割され、「*」がある場所で分割されます。詳細については、 http://msdn.microsoft.com/en-us/library/y7h14879.aspxを参照してください。

別のファイルに書き戻したい場合は、必要に応じて配列内の項目を配置し、StreamWriter を使用してそれらを書き込めるようにし、新しいファイル名を渡してください。例については、 http://www.dotnetperls.com/streamwriterを参照してください。

于 2013-01-30T12:40:45.340 に答える