2012-02-04 46 views
0

我需要從文件中讀取文本數據,每行有不同類型的數據。 所以,我創建了一個名爲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 


     } 

在此先感謝

編輯:爲了澄清,我要選擇一個字段分隔。

+1

如何被存儲在文件中的數據?任何字段分隔符?或者這些字段是固定長度的? – Oded 2012-02-04 13:56:46

+0

至於你的編輯 - 既然你說你是寫給這個文件的人,那麼你如何劃定這些字段完全取決於你。 – Oded 2012-02-04 14:54:25

+0

感謝您的幫助! – zmockus 2012-02-04 17:38:02

回答

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]) 
    } 
+0

你怎麼知道這個文件是CSV格式的? – Oded 2012-02-04 14:03:55

+0

謝謝你的幫助! – zmockus 2012-02-04 17:39:03

+0

@Oded我查閱了CSV文件,因爲它們大多是帶有標題的文件,所以會有很多示例代碼。 – 2012-02-05 02:02:22

1

它不是從你的問題記錄如何存儲在清文件 - 字段是分隔還是固定長度。

不管 - 你可以使用TextFieldParser類,其中:

提供用於解析結構化文本文件的方法和屬性。

它住在Microsoft.VisualBasic.dll程序集中的Microsoft.VisualBasic.FileIO命名空間中。

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; 

     } 

    } 
} 
相關問題