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......我想知道我怎么能一一“阅读”它?

另外我需要重新排序并编写一个新的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.WriteAlltextFile.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\\\

更新

如果要忽略空的部分(由* *字符串中的两个连续引起),则可以使用以下代码:

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 是您需要从文本文件中读取一行的内容。一旦你在一个字符串中有整行,你就可以使用 Split 方法。

line.Split('*');

会给你一个字符串数组。

于 2013-01-30T12:41:48.270 回答
0

一次读取一行文件,然后使用

myLine.split('*');

这会将字符串分成一个数组,将它拆分到有“*”的地方。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/y7h14879.aspx

当您想将其写回另一个文件时,您应该能够根据需要排列数组中的项目并使用 StreamWriter 写入它们,确保传入新文件名。有关示例,请参见http://www.dotnetperls.com/streamwriter 。

于 2013-01-30T12:40:45.340 回答
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 回答