Как читать разные типы данных из текстового файла? - PullRequest
0 голосов
/ 04 февраля 2012

Мне нужно прочитать текстовые данные из файла, где в каждой строке есть разные типы данных. Итак, я создал один большой класс с именем субъекта. Мои данные выглядят примерно так:

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 и т. Д., БЕЗ используя подстроки? (что-то вроде потока >> Subject.SubjName; поток >> 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 ]

2 голосов
/ 04 февраля 2012

Может помочь что-то вроде решения в этом вопросе, но, очевидно, используйте разделитель табуляции (\ 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])
    }
1 голос
/ 04 февраля 2012

Из вашего вопроса не ясно, как записи хранятся в файле - являются ли поля разделителями или имеют фиксированную длину.

Вне зависимости - вы можете использовать класс TextFieldParser,which:

Предоставляет методы и свойства для анализа файлов структурированного текста.

Он находится в пространстве имен Microsoft.VisualBasic.FileIO в сборке Microsoft.VisualBasic.dll.

0 голосов
/ 04 февраля 2012

Сплит и словарь и ваши два метода выбора здесь.Вы читаете в своей строке, разделяете ее на пустые места, затем сохраняете ее как пару имя / объект в словаре.

Поместите приведенный ниже код в файл * .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;

        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...