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

时间:2012-02-04 13:50:02

标签: c# file text stream

我需要从文件中读取文本数据,每行中都有不同类型的数据。 所以,我创建了一个名为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


        }

提前致谢

编辑:为了澄清,我希望字段是分隔的。

3 个答案:

答案 0 :(得分:2)

像这个问题中的解决方案可能有所帮助,但显然使用制表符分隔符(\ t)

CSV to object model mapping

 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;

        }

    }
}