2009-08-30 14 views
1

J'utilise Visual Studio 8. vb.net. J'ai un tableau, array1 (100,8) et je veux l'enregistrer en tant que fichier csv afin que je puisse l'ouvrir en excel et examiner le contenu de plus près. La fonctionnalité de sauvegarde en fichier csv ne fera pas partie intégrante de l'application vb terminée, j'ai juste besoin de quelque chose de rapide et de sale parce que les données du tableau ne demandent qu'à être vues dans Excel pour que je puisse comprendre signification et donc continuer à coder mon application.Comment sauvegarder un tableau bidimensionnel en tant que fichier csv?

Merci à tous pour votre aide.

Répondre

2

Untested 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); 
       } 
      } 
     } 
    } 

réflecteur qui se traduit par:

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 vous êtes fantastique! Merci beaucoup d'avoir pris le temps et la peine de faire tout cela. J'ai dû copier et coller le c d'origine dans un autre traducteur, developerfusion, parce que le code du réflecteur a produit des erreurs - mais accrocher ce petit inconvénient, je suis vraiment très très reconnaissant. Et encore une fois, à tous ceux qui ont pris le temps d'offrir de l'aide. –

0

Je n'ai pas un compilateur vb sur moi, mais peut-être ce pseudocode aidera

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 

Ensuite, ouvrez le fichier dans Excel.

+0

Merci à vous deux pour vos réponses. Yup je dois exporter de vb.net ne pas importer. Jusqu'à présent, j'ai FileOpen (1, "d: \ webfile.txt", OpenMode.Binary) Pour i = 0 à 99 Pour k = 0 à 7 FilePutObject (1, array1 (i, k)) Next k Next i Et ceci l'enregistre sous forme de fichier texte, mais ce dont j'ai besoin, c'est d'un fichier csv qu'excel peut ouvrir. L'utilisation de cette méthode mais l'enregistrement en tant que fichier .csv aboutit à un fichier qu'Excel ne reconnaît pas. Ummm quoi faire? –

+0

Utilisez ';' au lieu de virgules pour que Excel le reconnaisse automatiquement. Cela seul n'aidera pas pour les champs contenant le point-virgule (les citations peuvent aider dans ce cas) et pour les différents jeux de caractères (Excel par défaut pour le jeu de caractères ANSI spécifié dans Windows). En outre, cela ne fonctionnera pas sur Excel pour Mac. –

+0

@fantails ne sauvegarde pas en tant que webfile.txt, sauvegardez en tant que webfile.csv –

Questions connexes