如何读取文件一行中的内容.txt
本文关键字:txt 一行 何读取 读取 文件 | 更新日期: 2023-09-27 17:56:35
我有这样一行:
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
等字段......我想知道我怎样才能一个接一个地"阅读"它?
我还需要重新排序并编写一个新文件.txt,这些内容重新排序并且没有*
......我完全迷路了!
在我阅读并删除*
后,我需要像'field'
一样替换它们: '114765''3''659300''01''17/01/2013''1''Chuck Norris'
我尝试了substring()
和StreamWriter
StreamReader
ReadLine
但我无法做我需要的;''
使用 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'''
更新:
如果要忽略空的部分(由字符串中的两个连续* *
引起),则可以使用以下代码:
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()));
readline 是您需要从文本文件中读取一行的内容。 将整行包含在字符串中后,使用 Split 方法。
line.Split('*');
会给你一个字符串数组。
如何重新排序文件中的行?只需将字段到排序依据的值更改为按其他数值字段排序即可。
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);
}
}
}
读取一行文件,然后使用
myLine.split('*');
这会将字符串分成一个数组,在有"*"的地方拆分它。有关更多详细信息,请参阅 http://msdn.microsoft.com/en-us/library/y7h14879.aspx。
当您想将其写回另一个文件时,您应该能够根据需要排列数组中的项目并使用 StreamWriter 写入它们,确保传入新文件名。有关示例,请参阅 http://www.dotnetperls.com/streamwriter。