Как сохранить 2-мерный массив в виде CSV-файла? - PullRequest
1 голос
/ 30 августа 2009

Я использую Visual Studio 8. vb.net. У меня есть массив, array1 (100,8), и я хочу сохранить его как CSV-файл, чтобы я мог открыть его в превзойти и изучить содержимое более внимательно. Возможность сохранения в виде csv-файла не станет неотъемлемой частью готового приложения vb, мне просто нужно что-то быстрое и грязное, потому что данные в массиве просто требуют просмотра в excel, чтобы я мог полностью понять их значение и, следовательно, продолжить кодирование моего приложения.

Спасибо за все и любую помощь, которую вы можете оказать.

Ответы [ 2 ]

2 голосов
/ 30 августа 2009

непроверенный 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 голосов
/ 30 августа 2009

У меня нет компилятора vb, но, возможно, этот псевдокод поможет

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

Далее откройте файл в excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...