2010-07-10 5 views
0

J'ai besoin de l'aide de la logique/programmation pour lire plus d'un enregistrement à partir d'un fichier texte. Je peux lire ligne par ligne, mais je dois m'arrêter dès que l'enregistrement est terminé, pousser cet objet vers une liste, puis continuer avec un nouvel enregistrement jusqu'à ce que le suivant arrive, enregistrer dans la liste, etc ...Lecture de plusieurs enregistrements à partir du fichier texte en C#

L'en-tête de l'enregistrement commence toujours par G comme premier caractère. Le reste si V (variable), D (coordonnées), M (point d'insertion), etc ...

Le contenu du fichier ressemble à ceci: (données fictives)

G FEATURE01 LEVEL01 
M -10.5132 10.0000 697.5086 
V \~\@ENTITY=LINE 
V \~\@PENSTYLE=0 
V \~\@PENTHICK=1 
D -10.5089 12.0797 697.8155 
D -10.4971 13.6198 698.0429 
D -10.0399 17.3069 698.5913 
D -10.7665 11.6108 699.2279 
D -10.6769 15.9840 699.8735 
D -10.8229 13.6024 710.4438 
G FEATURE02 LEVEL02 
M -10.2681 10.0000 700.4186 
V \~\@ENTITY=LINE 
V \~\@PENSTYLE=0 
V \~\@PENTHICK=1 
D -10.2269 10.6946 700.4941 
D -10.2585 13.1788 700.7637 
D -10.2937 15.9480 701.0642 
D -10.9494 20.5230 709.1840 
D -10.9277 21.4909 709.4517 
D -10.8335 23.3862 709.9763 
G FEATURE01 LEVEL02 
M -15.4500 10.0000 700.4174 
V \~\@ENTITY=LINE 0.00 0 0.00 A A 
V \~\@PENSTYLE=0 0.00 0 0.00 A A 
V \~\@PENTHICK=1 0.00 0 0.00 A A 
D -15.5690 12.3042 700.6673 
D -15.3502 14.3130 700.8863 
D -15.1219 16.7179 701.1480 
D -15.0628 17.3409 701.2427 
D -15.5481 20.8968 709.2855 
D -15.3132 22.9163 709.8470 
D -15.1355 23.2957 709.9627 
G FEATURE03 LEVEL03 
P 0.0000 0.0000 0.0000 270.0000 90.0000 
M -12.8612 14.2951 737.6336 
V \~\@ENTITY=LINE 
V \~\@PENSTYLE=1 
V \~\@PENTHICK=1 
V @0ver1ay=KOOS 
D -13.2715 15.5321 736.5965 

Ainsi, comme ci-dessus à partir il y a 4 enregistrements dans le fichier texte. Des idées? Merci

+3

Veuillez poster le code que vous avez écrit jusqu'ici. Les gens n'aiment généralement pas écrire votre code pour vous. –

+0

mon code prendra 6 pages ... donc je préfère laisser quelqu'un coder la logique. Merci Chris! – riaandelange

Répondre

3

Voici un morceau de code que j'ai essayé de mettre en place pour la clarté plutôt que la robustesse, etc. Il devrait vous mettre sur la bonne voie. 1- J'ai créé une classe d'enregistrement simple qui sera créée pour chaque enregistrement (lignes commençant par 'G'), puis toutes les lignes suivantes sont ajoutées à cet enregistrement jusqu'à ce qu'un nouveau début d'enregistrement soit rencontré dans le fichier.

class Record 
{ 
    public List<string> Lines { get; private set; } 
    public Record() 
    { 
    Lines = new List<string>(); 
    } 
} 

2- Ensuite, le code suivant traitera la ligne de fichiers en ligne, la création de nouveaux records qu'ils se déclarerait et en ajoutant chaque enregistrement à une collection d'enregistrement.

// Collection to be populated with the record data in the file 
    List<Record> records = new List<Record>(); 

    using (FileStream fs = new FileStream("datafile.dat", FileMode.Open)) 
    using (StreamReader rdr = new StreamReader(fs)) 
    { 
    string line; 

    // Read first line 
    line = rdr.ReadLine(); 
    while (line != null) 
    { 
     // Check if we have a new record 
     if (line.StartsWith("G")) 
     { 
     // We have a start of a record so create an instance of the Record class 
     Record record = new Record(); 

     // Add the first line to the record 
     record.Lines.Add(line); 

     // Read the next line 
     line = rdr.ReadLine(); 

     // While the line is not the start of a new record or end of the file, 
     // add the data to the current record instance 
     while (line != null && !line.StartsWith("G")) 
     { 
      record.Lines.Add(line); 
      line = rdr.ReadLine(); 
     } 

     // Add the record instance to the record collection 
     records.Add(record); 
     } 
     else 
     { 
     // If we get here there was something unexpected 
     // So for now just move on and read the next line 
     line = rdr.ReadLine(); 
     } 
    } 
    } 
+0

Brillant Chris! Tu es l'homme. Merci... – riaandelange

Questions connexes