2016-09-14 5 views
0

J'ai un fichier de donnéesC# séparer les données dans une ligne à partir d'un fichier texte

Name; LastName; EurosCents; 
Name2; LastName2; EurosCents2; 

(par exemple:

John; Smith; 4,20; 
Josh; Peck; 6,50; 

)

Je dois lire les données et faire d'autres travaux avec ... Est-il possible de lire les lignes et de les sauvegarder? Comme la seule façon de lire à partir d'un fichier texte est de lire toute la ligne à la fois.

+2

Il y a beaucoup de façons! Qu'est-ce qui ne fonctionne pas exactement? –

+0

Vous devez l'expliquer un peu plus. – sachin

+1

Le seul moyen? Non ! 'File.ReadAllText();' vs 'File.ReadAllLines();' Si vous lisez tout le texte à la fois, vous pouvez toujours les séparer en saut de ligne! – user3185569

Répondre

2
var lst = File.ReadAllLines(yourFilePath).Select(x => new 
{ 
    FirstName = x.Split(';')[0] 
    LastName = x.Split(';')[1] 
    Value = decimal.Parse(x.Split(';')[2]) 
}).ToList(); 

utilisation

lst[7].FirstName = "xxx"; 
Console.WriteLine(lst[2].Value); 

etc ...

0

L'API File offre plusieurs options de lecture de fichiers. Ci-dessous est un moyen possible de procéder:

foreach(var line in File.ReadAllLines(path)) 
{ 
    var splitted = line.Split(';'); 
    var name = splitted.ElementAtOrDefault(0); 
    var lastName = splitted.ElementAtOrDefault(1); 
    var cents = Decimal.Parse(splitted.ElementAtOrDefault(2)); 
} 
0

le code simple pour lire le fichier entier est comme suit

string[] test(string path) 
    { 
     System.IO.StreamReader sr = new System.IO.StreamReader(path); 
     string[] str = sr.ReadToEnd().Split(';'); 
     sr.Close(); 
     return str; 
    } 
+1

Vous ne fermez jamais le StreamReader ... –

+0

merci pour la correction –

+0

Encore mieux - 'StreamReader' implémente' IDisposable', donc vous pouvez simplement utiliser: 'using (StreamReader sr = new StreamReader (chemin)) {/ * cod ici * /} ' Par conséquent la fermeture de flux sera gérée par ses propres moyens;) –

0

L'analyse sera très facile si vous êtes comfor table utilisant LINQ. Ci-dessous la ligne peut vous obtenir le fichier dans une structure hiérarchique.

var theselines = File.ReadLines(@"C:\Test.txt").Select(l => l.Split(',')); 

Vous pouvez voir le résultat de la ligne ci-dessus en déboguant. Plus tard, vous pouvez avoir n'importe quelle logique pour obtenir les données requises de chaque ligne sans utiliser la boucle foreach.

 var Data = theselines.Select(l => new 
     { 

      id = l.Where(t => t.Contains("01")).FirstOrDefault(), 
      Price = l.Where(t => t.Contains(",")).FirstOrDefault(), 
      Firstname= l[0], 
      lastname = l[1] 
     }); 
0

A condition que données elles-mêmes (les deux noms et en cents) ne peut pas contenir ; afin d'obtenir articles à partir des valeurs séparées par des virgules vous pouvez juste diviser:

var data = File 
    .ReadLines(@"C:\MyData.csv") 
    // .Skip(1) // <- in case you have caption to skip 
    .Select(line => line.Split(';')) 
    .Select(items => new { 
     Name = items[0], 
     LastName = items[1], 
     EuroCents = decimal.Parse(items[2]) //TODO: check type and its format 
    }); 
    //.ToArray(); // <- if you want to materialize as, say, an array 

Ensuite, vous pouvez l'utiliser

foreach (var item in data) { 
    if (item.EuroCents > 10) { 
    ... 
    } 
}