2012-08-24 199 views
2

我試圖創建將拉,閱讀和分離csv文件代碼的數組。它有四列沒有標題。我一直在網上搜索幾小時,沒有人真的似乎有答案,所以我希望有人在這裏可以。閱讀後,我需要它能夠被非常特殊地拉動,因爲它是設計的一部分。提前致謝!閱讀CSV文件中使用C#

+0

如果需要解析實體,請查看CSVHelper。其上的NuGet或在這裏:https://github.com/JoshClose/CsvHelper – StuartLC

+0

@SimonWhitehead 這是我的CSV樣子。我想把每一行都拉到一個有1(原子序數)和1.007 ....(atmoic質量)的數組中,所有這些都可以單獨調用。我試圖把各種週期表放在一起。 1,1.0079400000,氫,H 2,4.0026020000,氦氣,他 3,6.9410000000,鋰,李 4,9.0121820000,鈹,在每個原子符號後發生 – rreichel

+0

新品系。 – rreichel

回答

6

你的問題有點模糊,但我會試着盡我所能回答。

CSV文件是(根據定義)包含逗號分隔值的文件 - 這裏的關鍵是使用逗號作爲分隔符。就我個人而言,我發現在分析時使用不同的分隔符會減少缺陷。

我創建了以下測試CSV文件:

Column1,Column2,Column3,Column4 
Row1Value1,Row1Value2,Row1Value3,Row1Value4 
Row2Value1,Row2Value2,Row2Value3,Row2Value4 
Row3Value1,Row3Value2,Row3Value3,Row3Value4 
Row4Value1,Row4Value2,Row4Value3,Row4Value4 
Row5Value1,Row5Value2,Row5Value3,Row5Value4 

下面是一些代碼讀取該文件到一些簡單的結構,你可以然後操縱。您可能希望通過爲列和行(以及值)創建類來擴展此代碼。

 string sFileContents = ""; 

     using (StreamReader oStreamReader = new StreamReader(File.OpenRead("Test.csv"))) 
     { 
      sFileContents = oStreamReader.ReadToEnd(); 
     } 

     List<string[]> oCsvList = new List<string[]>(); 

     string[] sFileLines = sFileContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
     foreach (string sFileLine in sFileLines) 
     { 
      oCsvList.Add(sFileLine.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)); 
     } 

     int iColumnNumber = 0; 
     int iRowNumber = 0; 

     Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]); 

     iColumnNumber = 4; 
     iRowNumber = 2; 

     Console.WriteLine("Column{0}, Row{1} = \"{2}\"", iColumnNumber, iRowNumber, oCsvList[iColumnNumber][iRowNumber]); 

請記住,值是通過列號訪問的,然後是行號。

我希望這會有所幫助。

+0

這就是我的csv的樣子。我想把每一行都拉到一個有1(原子序數)和1.007 ....(atmoic質量)的數組中,所有這些都可以單獨調用。我試圖把各種週期表放在一起。 1,1.0079400000,氫,H 2,4.0026020000,氦,氦 3,6.9410000000,鋰,鋰 4,9.0121820000,鈹,是 – rreichel

+0

每個原子符號後面都有一條新的線。 – rreichel

+0

好的,我只是試圖實現你的代碼塊,它並沒有給我任何錯誤,但是我不能從閱讀之外調用數組列表名稱(oCsvList)(特別是試圖從一個for循環 – rreichel

0

所有您需要做的僅僅是把它轉換成一個byte []數組,並返回到一個字符串[建設者?]。然後分離每個條目,並像這樣解析它。

http://www.digitalcoding.com/Code-Snippets/C-Sharp/C-Code-Snippet-Convert-file-to-byte-array.html

而要轉換爲字符串:

// C# to convert a byte array to a string. 
byte [] dBytes = ... 
string str; 
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
str = enc.GetString(dBytes); 

你必須明白你需要做一個解析器。我讓一個人吸引雅虎股票,基本上把冒號分解成數據。

0

這是一個非常簡單的,做你想要什麼樣的方式。

var lineCount = File.ReadLines(@"C:\file.txt").Count(); 
var reader = new StreamReader(File.OpenRead(@"C:\location1.csv")); 
int[,] properties = new int[lineCount,4]; 
for(int i2 = 0; i2 < 4; i2++) 
{ 
    for(int i = 0; i < lineCount; i++) 
    { 
     var line = reader.ReadLine(); 
     var values = line.Split(';'); 
     properties[i,i2] = Convert.ToInt32(values[i2]; 
    } 
}