在C中,我能够读取文本文件的特定部分,如下所示:
game_results new_statistic(FILE* input, int* rounds) {
game_results out;
char temp[300];
if(fgets(temp, 300, input) != NULL) {
if(strlen(temp) < 3) {
fgets(temp, 300, input);
++*rounds;
}
/* Sorting the string and giving all the variables to the struct game_results */
sscanf(temp, "%s %d / %d %s %s - %s %d - %d %lf" , out.weekday, &out.date_day, &out.date_month, out.timet,
out.hometeam, out.awayteam, &out.home_goal, &out.away_goal, &out.crowd);
out.rounds = *rounds;
}
return out;
}
如何在C#中这样做?
我需要文本文件中的特定信息。我想读一下房间金额的价值,然后程序需要知道第一个房间名是&#34; Stue&#34;并且值为1表示房间中的电源连接器。接下来它将读取&#34; tv&#34;,然后是200,这是powerusage,3是standbyusage。然后它将对房间厨房做同样的事情。
文件中的文字如下所示:
Amount of Rooms: 2
Stue, 1
tv, 200, 3
Kitchen, 1
Fridge, 100, 2
答案 0 :(得分:1)
您可以使用File.ReadLines
方法打开文件并查询所需数据,并且只会读取足够的行来满足您的查询。
所以要获得第一行,使用LINQ的var rooms = Convert.ToInt32(File.ReadLines(@"c:\yourFile.txt").First().Split(':').Last());
方法,然后拆分冒号并获取数字。
var data = (from f in File.ReadLines(@"c:\yourFile.txt").Skip(1)
let parts = f.Split(',')
select new { key = parts[0], value = Convert.ToInt32(parts[1]) })
.ToDictionary(x => x.key, x => x.value);
要完成剩下的工作,您可以通过几种不同的方式来完成。我更喜欢LINQ,所以这是另一个例子。
读取除了第一行(跳过它),然后在逗号上拆分并创建一个字典。
range
答案 1 :(得分:0)
如果信息在同一行,每次使用简化方法就可以使用Streamreader
System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\Public\TestFolder\EXPORT.TXT");
while (file.Peek() != -1)
{
line = file.ReadLine();
string test1;
string readdate;
test1 = line.Substring(0, 8);//1
FullName = line.Substring(8, 20);//2
Address = line.Substring(28, 20);//3
ModuleNumber = line.Substring(48, 10);//4
test1 = line.Substring(58, 4);//5
ReadType = line.Substring(62, 1);//6
Service = line.Substring(63, 1);//7
test1 = line.Substring(64, 1);//8
test1 = line.Substring(65, 2);//9
test1 = line.Substring(67, 9);//10
}
这个特殊的代码是我用来读取固定宽度文件的代码,但你可以将每一行添加到列表中,我认为如果你的文本文件是固定宽度或分隔的格式会更好。
编辑:我本来希望能够在评论中提出这个建议,但由于我不允许发表评论,我将此作为一个更详细的答案。