我目前正在使用File.ReadLines
将文本文件读入List<>
。
为了识别我想要阅读的行,我已经识别了前一行,然后为了识别该行中的字符串,我使用了split string并将其输出到控制台。当我想读取超过2行时,我没有得到所需的输出,这是我的代码;
List<string> _FileContents = File.ReadLines(path)ToList();
string pLine = "";
string previousTrack = "";
string ppLine = "";
foreach (string line in _FileContents)
{
if (pLine.Contains("Race"))
{
if (pLine.Contains("TOD")) { }
}
else
{
if (line.Contains("Def"))
{
char delimiter = ' ';
string value = line;
string[] mySubstring = value.Split(delimiter);
string thisTrack = mySubstring[1];
string thisTrackName = mySubstring[5];
if (thisTrack != previousTrack)
{
Console.WriteLine(thisTrack);
}
previousTrack = mySubstring[1];
}
}
}
这是我尝试阅读超过2行;
foreach (string line in _FileContents)
{
if (ppLine.Contains("Race"))
{
if (ppLine.Contains("TOD")) { }
}
else
{
if (pLine.Contains("Def"))
{
char delimiter = ' ';
string value = line;
string[] mySubstring = value.Split(delimiter);
string thisTrack = mySubstring[1];
string thisTrackName = mySubstring[5];
if (thisTrack != previousTrack)
{
Console.WriteLine(thisTrack);
}
previousTrack = mySubstring[1];
if(line.Contains("Spell")
{ }
}
}
ppLine =pLine;
pLine = line;
}
我的目的是在这里阅读3行,但仍然在第二行使用拆分字符串,即pLine。由于这些行在我正在阅读的文本文件中的方式,如果我一起阅读这3行,那么我将不会检索重复的数据。
00000347: CEH r4 (Race) Race: 4 Post: MTP: TOD:2118
00000368: PHD r8 (Def) Phil 8/ 1/2016
00000406: PHD r8 (Spell)
我用我的分裂字符串捕获的CEH。我想要文件中的所有3个字母缩写,并且这3行中的每个组都有此信息。这些缩写在许多其他行上,但没有组织。我的目标最终将是对List进行排序并将它们输出到winform中的comboBox。
我的输出读数为2行如下 DMD CEH PHD STD 2BD MTD FCM ELD PMM 路德 ADM HSM 秦 跨国公司 EMD ASD LQN VCD TQN GZN AJE 我想要的输出是关键词&#34; Spell&#34;从最后一行开始。
答案 0 :(得分:2)
我建议使用for循环,这样你就可以一次移动三行:
var fileContents = File.ReadLines("some path").ToArray();
for (int i = 0; i < fileContents.Length - 2; i++)
{
var line1 = fileContents[i+0];
var line2 = fileContents[i+1];
var line3 = fileContents[i+2];
}
我的第二次尝试:
private static void Slider2()
{
var _FileContents = File.ReadAllLines("<path>");
var previousLine = string.Empty;
var lineBeforePrevious = string.Empty;
foreach (var line in _FileContents)
{
// do something with line, previousLine and lineBeforePrevious
// put some conditions around this
lineBeforePrevious = previousLine;
// put some conditions around this
previousLine = line;
}
}
P.S。我不能发表评论
答案 1 :(得分:0)
虽然只需使用for(...)即可实现此任务,但您可以使用 ORegex 找到要处理的行:
var input = File.ReadLines("myFile").ToArray();
var pTable = new PredicateTable<Word>();
pTable.AddPredicate("def", x => x.Contains("Def"));
pTable.AddPredicate("race", x => x.Contains("Race"));
pTable.AddPredicate("raceTod", x => x.Contains("Race") && x.Contains("TOD"));
var matches = new ORegex<string>("(?<g1>{race}{def})|(?<g2>{raceTod})", pTable).Matches(input)
foreach(var m in matches)
{
var lines = m.Values.ToArray()
var first = m.OCaptures["g1"];
var second = m.OCaptures["g2"];
//process your lines/groups
}
通过这种方式,您不仅可以获得这些行,还可以获得周围的上下文,例如:
{race}{def}.{1,3}
你可以在'Race'和'Def'之后获得1到3行。