如何阅读file.txt行中的内容

时间:2013-01-30 12:36:56

标签: c# winforms visual-studio-2010

我有这样一句话:

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 个答案:

答案 0 :(得分: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);

Demo

结果:

\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()));

答案 1 :(得分:1)

readline是您从文本文件中读取一行所需的内容。一旦你在字符串中包含整行,就可以使用Split方法。

line.Split('*');

会给你一系列字符串。

答案 2 :(得分:0)

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

myLine.split('*');

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

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

答案 3 :(得分: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);
        }
    }
}