處理CSV文件中的逗號

我正在尋找有關如何處理正在建立的csv文件的建議,而後由咱們的客戶上傳,而且該值可能帶有逗號(例如公司名稱)。 html

咱們正在研究的一些想法是:帶引號的標識符(值「,」值「,」等)或使用|。 而不是逗號。 最大的問題是咱們必須使其變得容易,不然客戶將沒法作到。 socket


#1樓

添加對Microsoft.VisualBasic的引用(是的,它說是VisualBasic,但它也能夠在C#中工做-請記住,最後都只是IL)。 spa

使用Microsoft.VisualBasic.FileIO.TextFieldParser類分析CSV文件,這是示例代碼: .net

Dim parser As TextFieldParser = New TextFieldParser("C:\mar0112.csv")
 parser.TextFieldType = FieldType.Delimited
 parser.SetDelimiters(",")      

   While Not parser.EndOfData         
      'Processing row             
      Dim fields() As String = parser.ReadFields         
      For Each field As String In fields             
         'TODO: Process field                   

      Next      
      parser.Close()
   End While

#2樓

nuget提供了一個庫,用於處理幾乎任何格式良好的CSV(.net) -CsvHelper code

映射到類的示例: htm

var csv = new CsvReader( textReader );
var records = csv.GetRecords<MyClass>();

讀取各個字段的示例: get

var csv = new CsvReader( textReader );
while( csv.Read() )
{
    var intField = csv.GetField<int>( 0 );
    var stringField = csv.GetField<string>( 1 );
    var boolField = csv.GetField<bool>( "HeaderName" );
}

讓客戶端驅動文件格式:
,是標準字段定界符, "是用於轉義包含定界符,引號或行尾的字段的標準值。 string

要將(例如) #用於字段,將'用於轉義: it

var csv = new CsvReader( textReader );
csv.Configuration.Delimiter = "#";
csv.Configuration.Quote = ''';
// read the file however meets your needs

更多文件 io


#3樓

您能夠使用替代的「定界符」,例如「;」 或「 |」 但最簡單的可能只是引用(大多數(體面的)CSV庫和大多數體面的電子表格支持)。

有關CSV分隔符的更多信息以及用於描述分隔符和引用的標準格式的規範,請參見此網頁


#4樓

您能夠像這樣讀取csv文件。

這利用了分割並照顧了空間。

ArrayList List = new ArrayList();
static ServerSocket Server;
static Socket socket;
static ArrayList<Object> list = new ArrayList<Object>();


public static void ReadFromXcel() throws FileNotFoundException
{   
    File f = new File("Book.csv");
    Scanner in = new Scanner(f);
    int count  =0;
    String[] date;
    String[] name;
    String[] Temp = new String[10];
    String[] Temp2 = new String[10];
    String[] numbers;
    ArrayList<String[]> List = new ArrayList<String[]>();
    HashMap m = new HashMap();

         in.nextLine();
         date = in.nextLine().split(",");
         name = in.nextLine().split(",");
         numbers = in.nextLine().split(",");
         while(in.hasNext())
         {
             String[] one = in.nextLine().split(",");
             List.add(one);
         }
         int xount = 0;
         //Making sure the lines don't start with a blank
         for(int y = 0; y<= date.length-1; y++)
         {
             if(!date[y].equals(""))
             {   
                 Temp[xount] = date[y];
                 Temp2[xount] = name[y];
                 xount++;
             }
         }

         date = Temp;
         name =Temp2;
         int counter = 0;
         while(counter < List.size())
         {
             String[] list = List.get(counter);
             String sNo = list[0];
             String Surname = list[1];
             String Name = list[2];
             for(int x = 3; x < list.length; x++)
             {           
                 m.put(numbers[x], list[x]);
             }
            Object newOne = new newOne(sNo, Name, Surname, m, false);
             StudentList.add(s);
             System.out.println(s.sNo);
             counter++;
         }

#5樓

若是您對關於如何通常地解析文件的更具教育意義的練習感興趣(以CSV爲例),則能夠查看Julian Bucknall的這篇文章 。 我喜歡這篇文章,由於它能夠將事情分解成更小的問題,這些問題要可貴多。 首先建立一個語法,一旦有了良好的語法,將語法轉換爲代碼是一個相對容易且有條理的過程。

本文使用C#,並在底部具備一個連接來下載代碼。

相關文章
相關標籤/搜索