如何读取 “” 之间的文本文件

本文关键字:之间 文本 文件 何读取 读取 | 更新日期: 2023-09-27 18:35:55

>我需要一个关于如何在引号之间读取文本文件数据的"想法"。例如:

line 1: "read a title"
line 2: "read a descr"
line 1: "read a title"
line 2: "read a descr"

我想做一个 foreach 类型的事情,我想将所有第 1 行和第 2 行作为一对读取,但在".

在我的程序中,我将输出(当然是针对每个):

readTerminatedNull(file1);
readTerminatedNull(file2);

我会逐行阅读,但有些文本可能是:

line 1: "read a super long
title that goes off"
line 2: "read a descr"

所以这就是为什么我想在".

抱歉,如果这太复杂了,而且有点难以解释。

编辑:感谢所有的反馈,但我不确定你是否得到了我想做的事情,:p不是你的错,我写的有点奇怪。

我将有一个充满引用的文本文件,以及文本。

里面的文字:

Refren: "myrefrence_1"
String: "This is a string of a refrence"
Refren: "myrefrence_2"
String: "hello world"
Refren: "myrefrence_3"
String: "I like cookies."

我希望它在第一行的引号中读取myrefrence_1,然后在".

然后,我将填充到我的程序中,将引用与字符串匹配。

但有时文本会不止一行。

Refren: "this is text that goes and then
return keys on some parts."

我仍然希望它通读".

如何读取 “” 之间的文本文件

(未测试,但你会明白的)

// Read all text from file
string sData = File.ReadAllText(@"c:/file.txt");
// Match strings between " "
Match match = Regex.Match(sData , "'"('w|'d|'s|'''")*'"",
                          RegexOptions.IgnoreCase);
// Read results and strip " out of them
foreach (var sResult in match) {
    sResult = sResult.Remove(0,1).Remove(sResult.length-2, 1);
    // Do whatever with sResult
}

您可以通过查看状态机来学习一些新技巧。基本上:一次阅读每个字符,并找出您现在处于什么状态。首先,将其编码为一个大的while循环,其中包含一个大的switch语句。然后,阅读状态模式,了解如何以面向对象的方式执行此操作。然后,抛弃它并使用delegate s,因为 c# 使这些东西变得如此容易。

然后,全部废弃,用多行标志编写一些蹩脚的正则表达式,然后用Perl的方式啜饮它。思考为什么这与原始状态机解决方案相同。

然后,真正陷入困境并了解解析器生成器(lexx/yacc 或某些 .NET 变体),并为您的问题编写一个简单的 BNF 语法。特别注意教程中使用的琐碎语法如何比您需要编写的语法复杂得多。为什么会这样?看看诺姆·乔姆斯基(Noam Chomsky)对此有何评论。

最终,你会筋疲力尽。我们都这样做。但是,挖掘是什么让编程成为地球上最酷的活动,你会非常有趣。倦怠只是意识到这是一个白日梦;)

说完,就到外面去。认识人。说话。多笑一笑。要友善。你现在是一个充满禅意的开发人员,带着邪恶的笑容。耶!你真棒!

您描述的内容听起来像是单列 CSV 文件。最简单的访问方法可能是使用 Microsoft.VisualBasic.FileIO.TextFieldParser 类,如下所示:

using (var csvParser = new TextFieldParser(new StringReader(content))
                             {
                                 Delimiters = new[] {","},
                                 HasFieldsEnclosedInQuotes = true
                             })
{
    while (!csvParser.EndOfData)
    {
        var fields = csvParser.ReadFields();
        Console.Print(fields[0]); //do something with the first (in your case only) field found.
    }
}

确定此方法是否有意义的最简单方法可能是考虑如果您正在阅读的字符串实际上包含双引号会发生什么。它最终会变成"He said ""this is quoted"", but I wasn't listening"(加倍报价),还是这种情况是不可能的?

如果引号以这种方式加倍,那么像这个内置框架这样的标准 CSV 阅读器可能是你最好的选择。

要读取文件的所有行,您可以使用:

File.ReadAllLines(pathToFile);

要从 " 中删除文本,您可以使用 String: 的子字符串方法: http://msdn.microsoft.com/en-us/library/aka44szs.aspx

你可以这样做:

string strippedString = original.Substring(1, original.length -2);

试试这个

var text = File.ReadAllLines(pathToFile);
var lines = text.Split(':')
                .Where((s,i) => i % 2 != 0)
                .Select(s => s.trim('"'));

首先,您需要使用以下方法读取文件:

File.ReadAllLines(filePath);

然后,您可以使用字符串拆分所有行。拆分功能。

在右括号上拆分将是你最好的选择。

正如我从您的问题中了解到的那样,您想使用某些特定设置读取和写入文本文件。 是吗?

我想参考INI文件,这些文件是它自己的文本文件,并提供您希望实现的设置配置。 以下是一些可以帮助您的链接。

http://www.codeproject.com/Articles/1966/An-INI-file-handling-class-using-C

http://jachman.wordpress.com/2006/09/11/how-to-access-ini-files-in-c-net/