J'essaie de lire une liste de nombres dans un tableau à partir d'un fichier csv car je veux ensuite pouvoir sortir dans un fichier toutes les combinaisons possibles de ces nombres.

Par exemple, voici une liste des nombres dans un fichier CSV

-8,-13,-8,-2,-4,6,4
-6,-12,-5,3,3,12,5
-5,-9,-4,5,10,13,10
-4,-8,-2,7,13,17,11
-3,-6,0,8,14,18,13
-2,-5,2,9,15,22,17
-1,-3,5,10,16,23,18

Comment puis-je lire le premier numéro de la liste dans un tableau séparé jusqu'au numéro suivant de la liste et ainsi de suite?

Ceci utilise Visual Basic

Merci

0
user4432997 31 déc. 2015 à 15:11

3 réponses

Meilleure réponse

Si votre fichier est composé de lignes de 7 nombres, vous avez besoin de 7 variables de collecte différentes. Parce que vous ne spécifiez pas le nombre de lignes présentes, je suppose un nombre inconnu de lignes et donc le type de collection préféré à utiliser est une liste (Of Integer) au lieu d'un tableau. En effet, la liste n'a pas besoin de savoir à l'avance combien d'éléments vous devez y stocker

Dim col1 As List(Of Integer) = new List(Of Integer)
Dim col2 As List(Of Integer) = new List(Of Integer)
Dim col3 As List(Of Integer) = new List(Of Integer)
Dim col4 As List(Of Integer) = new List(Of Integer)
Dim col5 As List(Of Integer) = new List(Of Integer)
Dim col6 As List(Of Integer) = new List(Of Integer)
Dim col7 As List(Of Integer) = new List(Of Integer)

for each line in File.ReadLines("c:\temp\this_is_your_file_to_read.csv")
    Dim parts = line.Split(","c)
    if parts.Length = 7 Then
        Col1.Add(Convert.ToInt32(parts(0)))
        Col2.Add(Convert.ToInt32(parts(1)))
        Col3.Add(Convert.ToInt32(parts(2)))
        Col4.Add(Convert.ToInt32(parts(3)))
        Col5.Add(Convert.ToInt32(parts(4)))
        Col6.Add(Convert.ToInt32(parts(5)))
        Col7.Add(Convert.ToInt32(parts(6)))
    Else
        MessageBox.Show("Line not matching the expected pattern")
    End If
Next
1
Steve 31 déc. 2015 à 13:07

Dans Excel, vous pouvez utiliser construire dans le mécanisme "Menu \ Données \ Texte à la colonne". Vous pouvez attribuer komma pour le séparer en colonnes.

Ou si vous ne souhaitez pas utiliser Excel, vous devez utiliser "ouvrir le fichier pour "pour lire les données, et utiliser la fonction split () pour attribuer des nombres à la matrice.

0
Oskar Shon 31 déc. 2015 à 12:54

En plus de la réponse de Steve, je propose une approche plus générique avec des tableaux multidimensionnels. Cela est dû au fait que nous pouvons voir l'entrée csv comme une sorte de matrice.

    Dim lines = File.ReadAllLines("E:\\MAtrix.csv")
    Dim matrixHeight = lines.Length - 1
    Dim matrixWidth = lines(0).Split(",").Length - 1 'Assume all lines have same length
    Dim matrix(,) As Integer = New Integer(matrixHeight, matrixWidth) {}

    'Go thru all lines of file 
    For x As Integer = 0 To matrixHeight
        Dim csv = lines(x).Split(",")
        'Go thru all csv of the line 
        For y As Integer = 0 To matrixWidth
            matrix(x, y) = csv(y) 'e.g. [0,0] => -8
        Next
    Next

    'Test
    For x As Integer = 0 To matrix.GetUpperBound(0)
        For y As Integer = 0 To matrix.GetUpperBound(1)
            Console.Write("[{0},{1}] => {2}; ", x, y, matrix(x, y).ToString())
        Next
        Console.WriteLine()
    Next

Tirages:

'[0,0] => -8; [0,1] => -13; [0,2] => -8; [0,3] => -2; [0,4] => -4; [0,5] => 6; [0,6] => 4;
    '[1,0] => -6; [1,1] => -12; [1,2] => -5; [1,3] => 3; [1,4] => 3; [1,5] => 12; [1,6] => 5;
    '[2,0] => -5; [2,1] => -9; [2,2] => -4; [2,3] => 5; [2,4] => 10; [2,5] => 13; [2,6] => 10;
    '[3,0] => -4; [3,1] => -8; [3,2] => -2; [3,3] => 7; [3,4] => 13; [3,5] => 17; [3,6] => 11;
    '[4,0] => -3; [4,1] => -6; [4,2] => 0; [4,3] => 8; [4,4] => 14; [4,5] => 18; [4,6] => 13;
    '[5,0] => -2; [5,1] => -5; [5,2] => 2; [5,3] => 9; [5,4] => 15; [5,5] => 22; [5,6] => 17;
    '[6,0] => -1; [6,1] => -3; [6,2] => 5; [6,3] => 10; [6,4] => 16; [6,5] => 23; [6,6] => 18;
0
Alex B. 31 déc. 2015 à 14:20