2013-06-10 2 views
0

J'ai des centaines de fichiers texte délimités par des espaces que je voudrais convertir en fichiers CSV VB.NET selon RFC 4180. Les fichiers ont une longueur variable mais peuvent contenir upp à 200000 lignes et ont un nombre variable de colonnes (jusqu'à 30) séparées par un nombre de "espaces" qui varie également entre un et 20. Les fichiers contiennent des informations que je voudrais supprimer, par exemple la première colonne et je voudrais aime aussi changer le contenu de la deuxième colonne en un horodatage Javascript valide. Ceci est un exemple des premières lignes de l'un des fichiers (notez que la plupart des espaces ne sont pas affichés).Conversion d'un fichier texte délimité par un espace en CSV VB.NET

# temps pour boil_q_1 boil_q_2 chil_q1 chil_q2 loccool locheat qdomwat
0,000000000 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31529E-03 132,39 9799,3 0,0000
8.0000000000E-02 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31528E-03 132,11 9917,1 0,0000
0,1600000000 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31527E-03 131,98 10047. 0,0000
0,2705515735 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31527E-03 131,97 10152. 0,0000
0,2705515763 1,0000 4,18700E-09 0,0000 4,18700E-11 1,31526E-03 131,97 10152. 0,0000
0,3345515763 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31525E-03 131,97 10184. 0,0000
0,3985515763 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31524E-03 131,98 10192. 0,0000
0,5265515763 1,0000 0,0000 4.18700E-09 4.18700E-11 1.31524E-03 131,98 10178. 0,0000
0,7825515763 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31523E-03 131,99 10164. 0,0000
0,7825515791 1,0000 4.18700E-09 0,0000 4.18700E-11 1.31522E-03 131,99 10164. 0,0000

Toutes les suggestions seraient les bienvenues.

Sincèrement Max

+0

Bienvenue dans Stack Overflow.Pouvez-vous nous montrer votre tentative actuelle pour gérer cela afin que nous puissions savoir quoi aider? – xxbbcc

+0

J'ai pensé à lire ligne par ligne et à diviser les colonnes en utilisant Dim fraction As String() = Text.Split ("") Dim s As Chaîne Pour chaque s En split Si s.Trim() <> "" Puis Console.WriteLine (s) Fin Si Ensuite, il doit y avoir de meilleures méthodes. – user2404987

+0

C'est probablement le moyen le plus facile de le faire. Vous devez générer des virgules et placer les valeurs de champs entre guillemets lorsque vous écrivez le fichier CSV. – xxbbcc

Répondre

0

En supposant le nombre variable d'espaces n'est pas parce que les colonnes sont vides ...

Je venais de rester simple et utiliser les outils à cordes, je suis habitué, brut mais rapide pour moi:

Dim s As String = TextBox1.Text 
    s = s.Replace(vbNewLine, "|").Replace(vbCr, "").Replace(vbLf, "") 
    s = s.Replace("| ", "|") ' trim leading space 
    Dim iLen As Integer = -1 
    Do 
     iLen = s.Length 
     s = s.Replace(" ", " ") 
    Loop Until iLen = s.Length 
    Dim aLines() As String = s.Split("|") 
    Dim aLine() As String 
    Dim aHeader() As String = aLines(0).Split(" ") 
    ' process header 
    For i As Long = 1 To aLines.GetUpperBound(0) 
     aLine = aLines(i).Split(" ") 
     Stop 
     ' process line 
    Next 

TextBox1 contient votre échantillon avec le parasite? # leader. Si les espaces variables sont dus à des colonnes vides, le massage sera plus complexe et peut-être mieux accompli dans la boucle intérieure. Ci-dessus Je viens de masser toute la chaîne, puis place les lignes dans un tableau, puis boucle sur les lignes.

Ceci est la seule première étape de l'OP.

J'ai trouvé que l'écriture de CSV est problématique, d'autant que les consommateurs ont parfois des idées différentes sur ce que dit la spécification. Si possible, tester avec le programme de consommation ultime.

0

Je fini en utilisant le code suivant et en ajoutant les informations à un DataGrid

Dim rowvalue As String 
Dim streamReader As IO.StreamReader = New IO.StreamReader(FileName) 
    While streamReader.Peek() <> -1 
    rowvalue = streamReader.ReadLine() 
    DataGridView1.Rows.Add(rowvalue.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)) 
End While 

Le problème est qu'il est assez lent et je dois encore supprimer l'un des coumns et en ajoutant tous les autres fichiers. Je suppose qu'il serait plus facile de stocker l'information d'une autre manière? Des idées?

Questions connexes