How to copy specific lines from one file to anothe

2019-09-11 07:24发布

I have a text file with about 3000 lines. Some lines start with numbers and some with text. For example:

Lines that start with numbers:

001 some text

0017 some text

8 some text...

Lines that start with text:

some text,

some text...

I want to copy lines that start with numbers to result.text.

Lines that start with text to log.txt.

Thanks a lot.

2条回答
看我几分像从前
2楼-- · 2019-09-11 07:56

Okay here is how i would do it

  • use File to read your text file into a string[]
  • create 2 string Lists to save "results" and "logs"
  • for each string in the string array get the first character with charAt
  • use Char.IsNumber to know to what List you should Add() the line you are working on
  • use File again to write the Lists to different files

this is enough of a hint incase this is your homework. do your research!

查看更多
一纸荒年 Trace。
3楼-- · 2019-09-11 08:08

It can be done in one statement for one file

WriteAllLines("new file", 
    ReadLines("source file")
    .Where(line => line.Lenth > 0 && Char.IsDigit(line[0]))
);

Note that it works on a line-by-line basis internally, i.e. there will be only one line at a time in memory. One line will be read from input processed and written to the output, then the next line and so on. This is because these methods work with IEnumerable<string>. IEnumerable does not buffer the whole file as would be the case if you read the file into an array, for instance.


You would have to repeat this twice for the two output files. Therefore I suggest the following approach, which reads the input file only once:

using (var log = CreateText("log.txt"))
using (var result = CreateText("result.txt")) {
    foreach (string line in ReadLines("source file")) {
        if (line.Length > 0) {
            if (Char.IsDigit(line[0])) {
                result.WriteLine(line);
            } else {
                log.WriteLine(line);
            }
        }
    }
}

This second approach does not buffer the file either.

查看更多
登录 后发表回答