2016-08-15 138 views
-1

我的CVS文件中有4列,前兩列有2個空行。我想跳過這些空行。我知道我必須通過文件循環,但我不知道如何執行此過程。跳過csv文件中的一些空行,並繼續讀數據行

任何建議,將不勝感激。

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var filePath = Path.Combine(Directory.GetCurrentDirectory(), "Santander .csv"); 
     var fileContents = ReadFile(filePath); 
     foreach (var line in fileContents) 
     { 
      Console.WriteLine(line); 
     } 

     Console.WriteLine("Press any key to exit..."); 
     Console.ReadKey(); 
    } 

    public static IList<string> ReadFile(string fileName) 
    { 
     var results = new List<string>(); 
     var target = File.ReadAllLines(fileName).ToList(); 
     return results; 
    } 
} 

正如你可以在這張圖片中看到的,我希望在開始的逗號被刪除,並且只顯示列中包含數據的行。

enter image description here

+2

什麼是期望的輸出?這與您之前的問題完全相同:[如何跳過csv文件中的空行並繼續使用數據讀取行? c#控制檯應用程序](http://stackoverflow.com/questions/38954395/how-to-skip-some-empty-rows-in-csv-file-and-continue-reading-rows-with-data-cs#38954692 ) –

+0

數據,數據,數據,數據,數據,數據,數據 數據,數據,數據 存儲號,存儲名稱,這是我想要的輸出 – user5813072

+0

是否希望輸出是所有字符串的集合列在一起列在一個列表中? –

回答

0

你可以檢查在該行的第一個字符是一個,,如果是的話你就會知道,第一列是空的:

foreach (var line in fileContents) 
{ 
    if(line.Trim().IndexOf(",") == 0) 
    { 
     // first column empty, skip 
     continue; 
    } 
    Console.WriteLine(line); 
} 
+0

我不希望跳過整列,而只是列1和列2中的前兩行,如圖所示 – user5813072

0

作爲評價和解釋,從上一個問題:您可以使用SelectMany將您的所有色譜柱分爲收集中的單獨物料,然後過濾掉空的物料:

public static IList<string> ReadFile(string fileName) 
{ 
    File.ReadAllLines(fileName) 
     .SelectMany(line => line.Split(',')) 
     .Where(item => !string.IsNullOrWhiteSpace(item)) 
     .ToList(); 
} 
+0

@ user5813072 - 這是否幫助您解決問題? –

0

通常,您必須逐字節讀取csv文件來驗證它,並在某些單元格包含\ n和時才正確讀取它。裏面的「

但對於簡單的情況下,你可以使用這樣的事情:

foreach (var line in fileContents) 
    { 
     if (line.Split(',').Any(s => s == "")) 
      continue; 
     Console.WriteLine(line); 
    } 

,你也有文件閱讀功能是一個錯誤,它總是返回空列表

0

如果你想。獲得無空數據的所有行,那就試試這個:

namespace ConsoleApplication1 
{ 
    using System.Linq; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      string[] lines = new string[3]; 

      string data1 = "data1,data2,data3,data4"; 
      string data2 = ",,data3,data4"; 
      string data3 = "data1,data2,data3,"; 

      lines[0] = data1; 
      lines[1] = data2; 
      lines[2] = data3; 

      var result = lines 
       .Select(line => line.Split(',')) 
       .Where(linePart => linePart.All(part => !string.IsNullOrWhiteSpace(part))) 
       .ToList(); 
     } 
    } 
} 

result將包含string[]線,沒有一個列表包含任何空的數據部分。

相關問題