2013-01-17 272 views
0

的.csv字符串第一個值我有一個創建從存儲在數據網格串.csv文件的一個小功能。刪除換行符使用VB

Dim rowcount As Integer = DataGridView1.Rows.Count - 1 
     For m As Integer = 0 To rowcount 
      Dim strrowvalue As String = "" 
      strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value) 
      For n As Integer = 1 To DataGridView1.Columns.Count - 1 
       If DataGridView1.CurrentCell.Value Is DBNull.Value Then 
        strrowvalue += "," + "0" 
       End If 
       If DataGridView1.Rows(m).Cells(n).Value Is DBNull.Value Then 
        strrowvalue += "," + "0" 
       Else 
        strrowvalue += "," + CStr(DataGridView1.Rows(m).Cells(n).Value) 
       End If 
      Next 

      If m <> rowcount Then 
       streamwriter.WriteLine(strrowvalue) 
      End If 
     Next 

但是在插入換行符後的第一個值之後。這會導致Excel和其他方案,以放置在第1行的第一個值,則該行的值的其餘部分被放置在線路2

實施例:

  1. 100,

  2. 555,333,333,666,777

  3. 200,

  4. 444,555,453,345,778

它應該是:

  1. 100,555,333,333,666,777

  2. 200,444,555,453,345,778

任何想法?

編輯:問題已被修改,以表明它是被插入到字符串,而不是一個空格斷行。

回答

2

所在空間從何而來,併爲擺脫空間的最佳方式可能是防止它擺在首位不斷髮生這不是從你的代碼清晰。

此外,空間將而不是導致Excel添加一個換行符(我剛剛測試它確保)。事實上,Excel默默吞下空間。如果一個換行符插在你的情況,表明字符不是空白而是別的東西。

除此之外,您去除空白作品代碼。你可能忘了,結果賦值給一個變量:

strrowvalue = strrowvalue.Replace(" ", "") 

編輯:因爲它顯然是一個回車符,而不是一個空間,使用此:

strrowvalue = strrowvalue.Replace(vbCr, "") 

或者,如果它是一個完整的Windows的風格換行符:

strrowvalue = strrowvalue.Replace(vbCrLf, "") 

如果沒有這些作品的(!奇怪),試試這個:

strrowvalue = strrowvalue.Replace(vbLf, "") 

在其他新聞中,你應該在這裏使用一個StringBuilder相反,它的性能將比大量重複的字符串連接的要好得多。

+0

我試過了你的建議,而且我還是得到了空間。 Notepad ++告訴我,在第一個值之後有一個CR linebreak ...不知道這是怎麼回事。 – Mellonjollie

+0

@Mellonjollie查看更新的答案。換行更有意義。 ;-) –

+0

也得到與字符串生成器相同的結果。換行直接來自DataGrid,但我不知道它爲什麼只是第一個值。 DataGrid正確顯示結果,其鏈接到的SQL StoredProc也是如此。 – Mellonjollie

0

根據被插入什麼樣的斷線,我會更新這條線以下之一:

strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCrLf,"") 

- 或 -

strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbCr,"") 

- 或 - -

strrowvalue += CStr(DataGridView1.Rows(m).Cells(0).Value).Replace(vbLf,"")