我需要从文件中读取文本数据,每行中都有不同类型的数据。 所以,我创建了一个名为subject的大类。我的数据看起来像这样:
Subject name M1 M2 M3 M4
Subject1 5 7 8 3
Old Subject 1 2 5 9
主要问题是,如果可以读取第1行中的所有数据并将其分配到适当的字段,例如SubjName = Subject1,M1 = 5,M2 = 7,M3 = 8等等,没有使用子串? (类似于stream>> Subject.SubjName; stream>> Subject.M1 = 5,依此类推C ++)。
这是我的代码。
internal void Read()
{
TextReader tr = new StreamReader("Data.txt");
string line;
while ((line = tr.ReadLine()) != null) //read till end of line
{
tr.ReadLine(); //Skips the first line
}
提前致谢
编辑:为了澄清,我希望字段是分隔的。
答案 0 :(得分:2)
像这个问题中的解决方案可能有所帮助,但显然使用制表符分隔符(\ t)
from line in File.ReadAllLines(fileName).Skip(1)
let columns = line.Split(',')
select new
{
Plant = columns[0],
Material = int.Parse(columns[1]),
Density = float.Parse(columns[2]),
StorageLocation = int.Parse(columns[3])
}
答案 1 :(得分:1)
从您的问题中不清楚记录是如何存储在文件中的 - 字段是分隔的还是固定的长度。
无论如何 - 您可以使用TextFieldParser
类,其中:
提供解析结构化文本文件的方法和属性。
它位于Microsoft.VisualBasic.FileIO
程序集中的Microsoft.VisualBasic.dll
命名空间中。
答案 2 :(得分:0)
分割和词典以及您选择的两种方法。您在行中读取,用空格分割,然后将其保存为字典中的名称/对象对。
将下面的代码放入* .cs文件中,然后构建并运行它作为演示:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
namespace stringsAsObjects
{
class stringObject
{
public static int Main(string[] args)
{
int counter = 0;
string line;
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader("Data.txt");
string nameLine = file.ReadLine();
string valueLine = file.ReadLine();
file.Close();
string[] varNames = nameLine.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
string[] varValues = valueLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, object> map = new Dictionary<string, object>();
for(int i = 0; i<varNames.Length; i++)
{
try
{
map[varNames[i]] = varValues[i];
}
catch (Exception ex)
{
map[varNames[i]] = null;
}
}
foreach (object de in map)
{
System.Console.WriteLine(de);
}
Console.ReadKey();
return 0;
}
}
}