[C] inlezen file

Pagina: 1
Acties:

  • cosmoOo
  • Registratie: Maart 2000
  • Laatst online: 12-08 21:44

cosmoOo

SCSI in vogelhuisje

Topicstarter
Ik probeer een file in te lezen met C

de file:
1 A 120 B 360 0 420 C 600 0 800 D 1200 0
2 E 120 F 360 0 420 G 600 0 800 H 1200 0
elke regel begin met 3 waardes (1 A 120), vervolgens een onbekend aantal blokken met 4 waardes (B 360 0 420, C 600 0 800) en sluit af met 3 waardes (D 1200 0).

de eerste poging was de file in te lezen met fscanf

C:
1
2
sscanf(s,"%d %d %d",&trein,&station,&vertrek);
while (fscanf(f,"%d %d %d %d ",&station,&aankomst,&snelheid,&vertrek) == 4)


dit gaat goed bij 1 regel, probleem is alleen dat fscanf newlines weggooid zodat je zomaar op de volgende regel aan het lezen bent

met fgets kan ik gewoon een hele regel inlezen, maar sscanf werkt niet hetzelfde als fscanf. de lokatie waar is gelezen wordt niet onthouden. zodat je steeds opnieuw aan het begin van de string begint.
nu zou je steeds de eerste tekens uit de string kunnen gooien maar ik weet niet eens hoeveel dat er zouden moeten zijn.

inlezen per karakter kan natuurlijk wel maar dat is wel wat lastiger met getallen e.d.

er moet toch een betere oplossing zijn.

[ Voor 4% gewijzigd door cosmoOo op 17-09-2003 12:11 ]

It's a known fact that one may train cats to do exactly what they want.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Beetje achterlijk fileformaat, maar check strchr eens in combinatie met atoi en de voorkennis dat atoi ophoudt bij het eerste non-numerieke karakter.

[ Voor 49% gewijzigd door curry684 op 17-09-2003 12:31 ]

Professionele website nodig?


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Dat ie de newline leest is op zich niet verwonderlijk, omdat (f)scanf een spatie in het patroon als een spatie, een tab of een newline opvat (meen dat ergens een keer gelezen te hebben).
Per karakter is op zich ook niet zo lastig. Kwestie van character inlezen, testen met isdigit() of het een getal is en zoniet is het einde van een getal gevonden en kan met atoi() (zoals curry al voorstelde) het getal gevonden worden. Dit vier keer doen en je bent er zou ik zeggen...

[ Voor 44% gewijzigd door SWfreak op 17-09-2003 13:36 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 21-08 18:33
Met fscanf
- Lees het eerste deel
- loop
- Onthoudt filepointer
- Lees het tweede deel.
- Repeat until fail

- fseek tot onthouden filepointer
- Lees derde deel.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.