2016-10-19 4 views
0

데이터 로깅 후 Visual Studio에서 CSV로 데이터 테이블을 내보내는 데 오래 동안 노력했습니다.비주얼 스튜디오에서 csv로 내보낼 때 Streamwriter가 무작위로 추가됨 C#

메모장이 괜찮지 만 Excel로 가져올 때 나는 이상한 결과를 얻는다. 줄 바꿈이 데이터에서 임의의 지점에 추가되는 것처럼 보입니다.

나는 지금 잠시 동안이 전투를 벌이므로 어떤 도움도 받으실 수 있습니다! Notepad Version

void SaveAllData() 
    { 
     { 
      saveFileDialog1.InitialDirectory = "C"; // open save file window 
      saveFileDialog1.Title = "Save as CSV File"; // promt save as csv 
      saveFileDialog1.FileName = DateTime.Now.ToString("dd.MM.yy_HH.mm"); 
      saveFileDialog1.Filter = "CSV File | *.csv"; // csv format 

      if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) // if save dialog opens 
      { 
       string value = ""; 
       DataGridViewRow dr = new DataGridViewRow(); 
       StreamWriter swOut = new StreamWriter(saveFileDialog1.FileName, true, Encoding.ASCII); 

       //write header rows to csv 
       for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) 
       { 
        if (i > 0) 
        { 
         swOut.Write(","); 
        } 
        swOut.Write(IncomingDataTable.Columns[i].HeaderText); 
       } 

       swOut.WriteLine(); 

       //write DataGridView rows to csv 
       for (int j = 0; j <= IncomingDataTable.Rows.Count - 1; j++) 
       { 
        if (j > 0) 
        { 
         swOut.WriteLine(); 
        } 
        dr = IncomingDataTable.Rows[j]; 

        for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) 
        { 
         if (i > 0) 
         { 
          swOut.Write(","); 

         } 

         value = dr.Cells[i].Value.ToString(); 
         swOut.Write(value); 

        } 
       } 
       swOut.Close(); 
      } 

    MessageBox.Show("Your data has been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); // alert user file has saved 



      serialPort1.Close(); // close serial port 
      Setup_Page f1 = new Setup_Page(); // open setup page 
      this.Hide(); 
      f1.ShowDialog(); 
      Close(); // close this page 
     } 
    } 
+0

이 작업을 수행하는 라이브러리가 있습니다. https://www.nuget.org/packages/CsvHelper/ – Magnus

+0

@Magnus 내 문제는 CSV로 내보내는 isnt입니다. 내보내기 중에 내 데이터가 줄 바꿈됩니다. – charley

+0

들어오는 데이터에 줄 바꿈이 포함되어 있습니까? 메모장 대신 워드 패드에서 CSV 파일을 열어보십시오. 워드 패드는 줄 바꿈에서 중단되지만 메모장에서는 그렇지 않습니다. 그게 문제라면, 쓰기 전에 모든 들어오는 데이터를 정리하십시오. – Lithis

답변

0

사용자의 입력 데이터가 줄 바꿈을 포함하고 당신이 그들을 출력, 일부 응용 프로그램은 줄 바꿈로 취급하지만 일부는하지 않을 경우

Excel Version

. 메모장은 그렇지 않으므로 메모장에서 한 줄로 보입니다. Excel은 줄 바꿈을 인식하고 새 행을 시작합니다. 메모장 대신 워드 패드에서 CSV 파일을 엽니 다. WordPad는 줄 바꿈을 인식하지만 메모장에서는 보이지 않습니다.

간단한 수정 프로그램을 작성하기 전에 입력 데이터에 String.Trim을 호출하는 것이 좋습니다. 그러나 Magnus가 말했듯이 도서관은 당신의 친구입니다. 좋은 라이브러리를 사용했다면, 우선 잘 쓰여진 라이브러리가 데이터에 삽입 된 개행을 처리 했으므로 처음에는 문제가되지 않았을 수 있습니다.

줄 바꿈을 트리밍 할 수 있다고 말할 수 있습니다. 음, 개행이 데이터의 중간에 있다면 어떨까요? Trim이 처리하지 않습니다. 줄 바꿈이 없을거야? 쉼표는? 데이터가 단지 숫자이기 때문에 쉼표가 없습니까? 10 진수이고, 그 컴퓨터를 생산 한 컴퓨터가 프랑스 또는 소수 구분 기호로 쉼표를 사용하는 다른 많은 국가에 있다면 어떻게 될까요? 데이터의 따옴표는 어떨까요? 도서관에서 이미이 모든 경우를 처리했을 수도 있습니다. (쉼표 소수점 구분 기호는 출력을 사용하는 사람에게 여전히 문제가 될 수 있지만 적어도 CSV는 올바른 형식이어야합니다.)

CSV는 잘 정의 된 표준이 아닙니다. 다른 응용 프로그램과 라이브러리는 위의 경우를 처리하기 위해 다른 전략을 사용하므로 라이브러리가 Excel과 동일한 형식을 사용하지 않으면 여전히 제대로로드되지 않을 수 있습니다.

관련 문제