如何从文本文件中读取不同类型的数据
本文关键字:同类型 数据 读取 文本 文件 | 更新日期: 2023-09-27 18:22:23
我需要从文件中读取文本数据,其中每行都有不同类型的数据。所以,我创建了一个名为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等等,而不使用子字符串?(类似于C++中的stream>>Subject.SubjName;stream>>Subject.M1=5等等)。
这是我的密码。
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
}
提前感谢
编辑:为了澄清,我更喜欢用分隔符分隔字段。
类似这个问题的解决方案可能会有所帮助,但显然需要使用制表符(''t)
CSV到对象模型映射
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])
}
从您的问题中还不清楚记录是如何存储在文件中的——字段是分隔的还是固定长度的。
无论如何-您可以使用TextFieldParser
类,该类为:
提供用于分析结构化文本文件的方法和属性。
它位于Microsoft.VisualBasic.dll
程序集中的Microsoft.VisualBasic.FileIO
命名空间中。
Split和Dictionary以及您在此处选择的两种方法。你在你的行中阅读,用空格分隔,然后将其保存为字典中的名称/对象对。
将下面的代码放入*.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;
}
}
}