2014-05-23 7 views
0

J'ai un fichier csv et le début et la fin de ce fichier est une poubelle dont je n'ai pas besoin.Lire un fichier csv entre 2 points

J'utilise ling pour lire le fichier

string startingline="start"; 
string endline="end"; 

var lines = File.ReadLines(myFile, Encoding.Default) 
    .Skip(1) 
    .Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)).ToList(); 

Étant donné que j'ai un début à lire et une fin pour lire comment puis-je obtenir que le texte qui se trouve entre ces 2 lignes?

Avez-vous des suggestions?

MISE À JOUR avec un échantillon du document:

start 

Name,Surname,City,Country 

jo,Bloggs,London,Uk, 

Name,Surname,City,Country 


Mark,Smith,Paris,France, 

end 

Je ne contrôle pas sur ce document

Répondre

1

Vous devez combiner Skip/SkipWhile et Take/TakeWhile.

var lines = File.ReadLines("Path", Encoding.Default) 
     .SkipWhile(l => l.Trim() != "start").Skip(1) 
     .TakeWhile(l => l.Trim() != "end") 
     .Select(line => line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)) 
     .ToList(); 

Je l'ai utilisé Skip(1) derrière SkipWhile d'omettre la ligne "start" parce que vous voulez lignes entre.

+0

Vous pouvez essayer d'utiliser 'SkipUntil (l => l.Trim() ==" start ")' sans '.Skip (1)'. 'new [] {1,2,3,4} .SkipUntil (x => x == 2)' renvoie '3,4'. 'SkipUntil' est de [MoreLINQ] (https://code.google.com/p/morelinq/source/browse/MoreLinq/SkipUntil.cs?r=ff61e76ceb312f5e9251739f80caef48173551d9) –

+0

@IlyaIvanov: à mon avis, il y a de meilleures raisons pour MoreLinq que méthode. Je trouve 'Skip (1)' assez lisible. –

+0

d'accord, il y a un ** énorme ** nombre de bonnes raisons d'utiliser MoreLINQ. C'est juste un minuscule. –