2009-08-30 6 views
1

私はVisual Studio 8. vb.netを使用しています。 私は配列array1(100,8)を持っています。私はそれを開くことができるようにCSVファイルとして保存したいのですが、 はより密接に内容を調べて調べます。 csvファイルとして保存するという機能は、完成したvbアプリケーションの不可欠な部分を形成することはありません。配列のデータはExcelでの表示が必要なため、私のアプリケーションのコーディングを続けます。2次元配列をcsvファイルとして保存するにはどうすればよいですか?

ありがとうございました。

答えて

2

未テストのC#:

static void WriteCsv<T>(T[,] data, string path) 
    { 
     char[] specialChars = {',','\"', '\n','\r'}; 
     using (var file = File.CreateText(path)) 
     { 
      int height = data.GetLength(0), width = data.GetLength(1); 
      for (int i = 0; i < height; i++) 
      { 
       if (i > 0) file.WriteLine(); 
       for (int j = 0; j < width; j++) 
       { 
        string value = Convert.ToString(data[i, j]); 
        if (value.IndexOfAny(specialChars) >= 0) 
        { 
         value = "\"" + value.Replace("\"", "\"\"") 
          + "\""; 
        } 
        if (j > 0) file.Write(','); 
        file.Write(value); 
       } 
      } 
     } 
    } 

反射鏡のように変換します。

Private Shared Sub WriteCsv(Of T)(ByVal data As T(0 To .,0 To .), ByVal path As String) 
    Dim specialChars As Char() = New Char() { ","c, """"c, ChrW(10), ChrW(13) } 
    Using file As StreamWriter = File.CreateText(path) 
     Dim height As Integer = data.GetLength(0) 
     Dim width As Integer = data.GetLength(1) 
     Dim i As Integer 
     For i = 0 To height - 1 
      If (i > 0) Then 
       file.WriteLine 
      End If 
      Dim j As Integer 
      For j = 0 To width - 1 
       Dim value As String = Convert.ToString(data(i, j)) 
       If (value.IndexOfAny(specialChars) >= 0) Then 
        value = ("""" & value.Replace("""", """""") & """") 
       End If 
       If (j > 0) Then 
        file.Write(","c) 
       End If 
       file.Write(value) 
      Next j 
     Next i 
    End Using 
End Sub 
+0

Marcあなたは素晴らしいです!すべてのことをする時間と苦労を取ってくれてありがとう、ありがとう。リフレクターコードでエラーが発生したため、元のcを別の翻訳者、developerfusionにコピーして貼り付ける必要がありましたが、その小さな不便さを抱き、本当に感謝しています。そしてもう一度、時間をかけて助けを求めるすべての人にお伺いしましょう。 –

0

私は私にVBコンパイラを持っていないが、多分この擬似コードは、Excelでファイルを開き、

textStream = File.OpenText("c:\output.csv") 
for i = 0 to 99 
{ 
    for j = 0 to 7 
    { 
    write array1[i][j] to textStream 
    write "," to textStream 
    } 
    write newline to textStream 
} 
close textstream 

次に役立ちます。

+0

は、両方のご回答をいただき、ありがとうございます。うん、私は輸入していないvb.netからエクスポートする必要があります。これまでのところ私が持っている のFileOpen(1、 "D:\ webfile.txt"、OpenMode.Binary) の場合については、I = 0〜99 のk = 0 7 FilePutObject(1、配列1(I、K)) へ次にk 次へi これはテキストファイルとして保存しますが、私が必要とするのはExcelが開くことができるCSVファイルです。この方法を使用しても.csvファイルとして保存すると、Excelで認識されないファイルが作成されます。何をすべきか? –

+0

';'を使用します。 Excelで自動的に認識されるようにカンマの代わりに使用します。これだけでは、セミコロン(引用符はその場合に役立つかもしれません)と異なる文字セット(Windowsで指定されたANSI文字セットにデフォルトで設定されたExcel)を含むフィールドでは役に立ちません。また、Excel for Macでは動作しません。 –

+0

@fantailsはwebfile.txtとして保存せず、webfile.csvとして保存します –

関連する問題