如何从文本文件中读取不同类型的数据

本文关键字:同类型 数据 读取 文本 文件 | 更新日期: 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;
        }
    }
}