-4

我有一个大约 3 行的大文件。每一行都包含这样的记录:

1|2|3|4|5|6|7|8|9

正好 8 个分隔符,如 '|' 在每一行。我正在寻找一种读取此文件的方法,然后仅从每一行中提取最后一个“9”数字并将其存储到另一个文件中。

编辑:

好的,这就是我已经完成的。

using (StreamReader sr = new StreamReader(filepath))
    using (StreamWriter sw = new StreamWriter(filepath1))
    {
        string line = null;
        while ((line = sr.ReadLine()) != null)
            sw.WriteLine(line.Split('|')[8]);
    }

File.WriteAllLines("filepath", File.ReadAllLines(filepath).Where(l => !string.IsNullOrWhiteSpace(l)));

读取文件,提取最后一位数字,然后写入新文件并清除空白行。最后一位是 10-15 个符号,我想提取前 6 个。我继续阅读并尝试一些,当我完成或有一些问题时,我会再次编辑。

谢谢

编辑 2:好的,这里我从号码中取前 8 位数字:

 sw.WriteLine(line.Substring(0, Math.Min(line.Length, 8)));

编辑 3:我不知道现在如何匹配文件中留下的每个数字。我想匹配它们并查看文件中有多少次女巫号码。

有什么帮助吗?

4

8 回答 8

3

我正在寻找一种读取此文件的方法,然后仅从每一行中提取最后一个 [..] 数字并将其存储到另一个文件中。

你到底在哪方面有问题?在伪代码中,这就是你想要的:

fileReader = OpenFile("input")
fileWriter = OpenFile("output")

while !fileReader.EndOfFile 
    line = fileReader.ReadLine
    records[] = line.Split('|')
    value = records[8]
    fileWriter.WriteLine(value)
do

因此,开始实施它,并随时就您遇到问题的任何特定行提出问题。我发布的每一行代码都包含足够的指针来找出 C# 代码或对其进行网络搜索的术语。

于 2013-10-15T08:50:27.330 回答
2

你没有说你被困在哪里。分解问题:

 Write and run minimal C# program

 Read lines from file

 Break up one line

 write result line to a file

你被其中任何一个困住了吗?然后问一个具体的问题。这种分解技术是许多编程任务的关键,通常也是复杂任务的关键。

您可能会发现字符串拆分功能很有用。

于 2013-10-15T08:53:23.697 回答
2

因为它是一个巨大的文件,你必须逐行阅读!

public IEnumerable ReadFileIterator(String filePath)
        {
            using (StreamReader streamReader = new StreamReader(filePath, Encoding.Default))
            {
                String line;
                while ((line = streamReader.ReadLine()) != null)
                {
                    yield return line;
                }
                yield break;
            }
        }

        public void WriteToFile(String inputFilePath, String outputFilePath)
        {
            using (StreamWriter streamWriter = new StreamWriter(outputFilePath, true, Encoding.Default))
            {
                foreach (String line in ReadFileIterator(inputFilePath))
                {
                    String[] subStrings = line.Split('|');
                    streamWriter.WriteLine(subStrings[8]);
                }
                streamWriter.Flush();
                streamWriter.Close();
            }
        }
于 2013-10-15T09:01:02.187 回答
1

用于String.Split()获取数组中的行并获取最后一个元素并将其存储到另一个文件中。对每一行重复该过程。

于 2013-10-15T08:52:01.910 回答
1

使用 LINQ,您可以执行以下操作来过滤数字:

var numbers = from l in File.ReadLines(fileName)
              let p = l.Split('|')
              select p[8];

然后将它们写入这样的新文件中:

File.WriteAllText(newFileName, String.Join("\r\n", numbers));
于 2013-10-15T08:53:37.803 回答
1
using (StreamReader sr = new StreamReader("input"))
    using (StreamWriter sw = new StreamWriter("output"))
    {
        string line = null;
        while ((line=sr.ReadLine())!=null)
            sw.WriteLine(line.Split('|')[8]);
    }
于 2013-10-15T08:53:56.637 回答
1

尝试这个...

// Read the file and display it line by line.
System.IO.StreamReader file = 
   new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
     string[] words = s.Split('|');
    string value = words [8]
   Console.WriteLine (value);

}

file.Close();
于 2013-10-15T08:55:40.410 回答
1

一些指针从:StreamReader.Readline()String.Split(). 两页都有示例。

于 2013-10-15T08:53:03.773 回答