2011-12-02 3 views
0

J'ai une chaîne commeSpliting un Visual Basic CSV

Query_1,ab563372363_C/R,100.00,249,0,0,1,249,1,249,1e-132, 460 
Query_1,ab563372356_C/R,99.60,249,1,0,1,249,1,249,5e-131, 455 

dans un fichier en deux lignes distinctes. Je le lis dans la boîte de texte. Je dois sortir ab563372363_C/R et ab563372356_C/R dans une zone de texte. Je suis en train d'utiliser la fonction split pour cela, mais sa ne fonctionne pas ..

Dim splitString as Array 
results = "test.txt" 
Dim FileText As String = IO.File.ReadAllText(results) 'reads the above contents from file 
splitString = Split(FileText, ",", 14) 
TextBox2.text = splitString(1) & splitString(13) 

pour le code ci-dessus, il imprime juste la chose .. Ce qui est mal?

Merci

+1

Utilisez la classe TextFieldParser, il a été fait pour le faire. http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser%28v=VS.90%29.aspx –

+0

@HansPassant très cool! Je n'ai jamais entendu parler de cette classe. – Ric

Répondre

1

Première

Puisque vous lisez le texte entier, votre FileText serait finir comme ceci:

Query_1,ab563372363_C/R,100.00,249,0,0,1,249,1,249,1e-132,460 
\r\n 
Query_1,ab563372356_C/R,99.60,249,1,0,1,249,1,249,5e-131, 455 

Ainsi, lorsque vous faites référence à votre splitString avec ces indices (,) votre résultat pourrait être erroné.

Deuxième

Essayez de spécifier quel type de type de votre tableau est, Dim splitString as Array devrait être Dim splitString As String()

Troisième

rendre votre code plus lisible/maintenable et facile à modifier (non seulement pour vous, mais d'autres)

Le code

Private const FirstIndex = 1 
Private const SecondIndex = 12 

Sub Main 
    Dim myDelimiter As Char 

    Dim myString As String 
    Dim mySplit As String() 

    Dim myResult1 As String 
    Dim myResult2 As String 

    myDelimiter = "," 

    myString += "Query_1,ab563372363_C/R,100.00,249,0,0,1,249,1,249,1e-132, 460" 
    myString += "Query_1,ab563372356_C/R,99.60,249,1,0,1,249,1,249,5e-131, 455" 

    mySplit = myString.Split(myDelimiter) 

    myResult1 = mySplit(FirstIndex) 
    myResult2 = mySplit(SecondIndex) 

    Console.WriteLine(myResult1) 
    Console.WriteLine(myResult2) 
End Sub 
+0

La question était de lire à partir d'un fichier sur disque, pas à partir d'une chaîne concaténée prédéfinie.Cela peut fonctionner, mais ce n'est pas très robuste si plus de chaînes doivent être ajoutées, ce qui est probablement – Ric

+0

@Ric, comme je l'ai souligné (si vous lisez tout le post), il utilise ** ReadAllText ** qui retournera "Line # 1 \ nLine # 2 ", c'est ce que j'ai codé de cette façon. De plus mon code est une explication pas un exemple de travail qui va essayer de répondre à ses besoins. – Eder

+0

fair-play, ne voulait pas offenser! Excuses :) – Ric

2

Essayez cette

Private Function GetRequiredText() As List(Of String) 
    Dim requiredStringList As New List(Of String) 
    Dim file = "test.txt" 
    If FileIO.FileSystem.FileExists(file) Then 

     Dim reader As System.IO.StreamReader = System.IO.File.OpenText(file) 
     Dim line As String = reader.ReadLine() 
     While line IsNot Nothing 
      requiredStringList.Add(line.Split(",")(1)) 
      line = reader.ReadLine() 
     End While 

     reader.Close() 
     reader.Dispose() 
    End If 
    Return requiredStringList 
End Function 

Cela lire la ligne de fichiers en ligne et ajouter l'élément dont vous avez besoin à une liste de chaînes qui sera restituée par la fonction.

Renvoyer une liste (Of String) peut être exagéré, mais il est assez simple à illustrer et à utiliser.

Vous pouvez ensuite parcourir la liste et faire ce dont vous avez besoin avec le contenu de la liste.

Commentaires welcome !!

Aussi cela pourrait fonctionner ...

Dim query = From lines In System.IO.File.ReadAllLines(file) _ 
        Select lines.Split(",")(1) 

cela retourne un IEnumerable (Of String)

Profitez

+0

+1 pour souligner de nombreuses façons d'accomplir cette tâche (Fonctions et génériques, LINQ) – Eder

+0

acclamations !! juste pensé d'une autre façon avec moins de lignes de code: Dim query = System.IO.File.ReadAllLines (fichier) .Select (Fonction (f) f.Split (",") (1)) – Ric

+0

Merci Ric .... ............. – Ank