如何从文件中指定读取区域?

时间:2016-07-11 15:03:01

标签: c# .net c#-4.0

我有以下txt文件

//test.txt

需要的信息[12334,56565]重要数字

我希望从[开始阅读]

string print= File.ReadAllText(@"C:/Users/kokos/Desktop/test.txt");
Console.WriteLine(print);

以上是阅读整个文件,但我只想打印

[12334,56565]

3 个答案:

答案 0 :(得分:1)

您可以使用LINQ执行此操作。

var text = File.ReadAllText(@"C:/Users/kokos/Desktop/test.txt"); 
var print = new string(text.SkipWhile(c => c != '[')
                           .TakeWhile(c => c != ']')
                           .ToArray())+"]";
// print = "[12334,56565]"

...如果你不想领先[,那就这样做......

var print = new string(text.SkipWhile(c => c != '[').Skip(1)
                           .TakeWhile(c => c != ']')
                           .ToArray());    
// print = "12334,56565"

如果您只想弄乱字符串,可以选择其他几个选项。 (这些更容易出错。)

var print = text.Substring(text.IndexOf('['), text.IndexOf(']') - text.IndexOf('[') + 1);

......或......

var print = "[" + text.Split('[')[1].Split(']')[0] + "]";

......正则表达式看起来可能更好。

答案 1 :(得分:1)

string pattern = @"\[(.*?)\]";
string print = File.ReadAllText(@"C:/Users/kokos/Desktop/test.txt"); 
var result = Regex.Matches(print, pattern);

foreach (Match r in result)
{
    Console.WriteLine(r.Groups[1]);
}

如Matthew所述,这是一个使用正则表达式的解决方案。位于.cs的顶部。添加以下行:using System.Text.RegularExpressions;

注意 这个答案假定OP希望将整个文件加载到内存中。

答案 2 :(得分:0)

var data = Encoding.UTF8.GetBytes("here is a simulated file [here's the data I'm after]");
var read = new StringBuilder();
var inScope = false;
using(var ms = new MemoryStream(data)) {
    using(var sr = new StreamReader(ms)) {
        while(!sr.EndOfStream) {
            var by = sr.Read();
            if (((char)by) == '[') {
                inScope = true;
                continue;
            }
            else if (((char)by) == ']') {
                inScope = false;
                break;
            }

            if (inScope) {
                read.Append((char)by);
            }
        }
    }
}

read.ToString().Dump();

上面的代码是一个LINQPad代码段,它显示了如何逐字节读取数据流并提取你所追踪的数据而不将整个内容加载到内存中。

不要使用内存流,只需使用文件流作为您要阅读的文件。

这对于所有演员来说都不是最优的(只做一次),但它应该足以证明基本的想法。

这个输出是:“这是我之后的数据”

警告请确保将编码对象用于您的文件所使用的编码!