Hej på er! Låt säga att jag har en text-fil som har tre kolumner och massa rader med massa siffror och som man skulle vilja att ens program läser från filen och sparar in till en structs. Hur gör man då?
Kikar ni på bilden här nedan som är i C++ så förstår ni nog lite hur jag menar:
(från det här klippet för övrigt:
Alltså....
Jag har en text-fil som ser ut typ så här:
500 200 413
12 150 0
312 22 0
12 12 1
3 kolumner och några rader som har massa siffror alltså.
Och sen vill jag att mitt C-program ska läsa siffrorna och spara varje kolumn i en array som ligger i en structs och så att jag sedan kan göra massa andra fina beräkningar på det. Några tips på hur jag gör? I princip samma sak som är gjort på bilden (eller i klippet).
För-allokera en struct som har tillräckligt många element.
Byt sedan ut cout mot tilldelning.
Du får ha en index variabel som räknas upp i varje loop-varv
Om jag vet att talen är separerade med ett mellanslag skulle jag jag läsa in en hel textrad åt gången till en array av char.
Därefter söka upp första mellanslaget och ersätta det med '/0' och sen komma ihåg nästa position, p1.
Sök vidare och hitta nästa mellanslag, byt till '/0' och minns nästa position, p2.
Nu har du i princip tre pekare till 'talen', textrad[0], textrad[p1] och textrad[p2].
Nu kan du kopiera, omvandla till integer kopiera in till en struct eller vad du nu vill göra.
Om du har fler än ett mellanslag eller andra avgränsningstecken mellan talen, är det ganska lätt att bygga ut sökningen för detta. Lägg då sökningen i en funktion som anropas med pekare till textraden och en integer för den position där sökningen skall göras.
Returnera den positionen som ligger direkt efter talet.
Sökningen kan fungera på olika sätt, söka efter mellanslag, söka efter char mellan '0' och '9', inkludera '+' och '-' om det behövs.
Jag vet inte riktigt om din fråga gäller hur sökningen/uppdelningen fungerar eller hur en struct fungerar?
Som jag ser/förstår det:
* Det finns en typedef som anger att antal parameter i en struct.
* Varje rad innehåller en samling af denna typedef.
* Filen kan hålla ett godtyckligt antal rader.
Att läsa in filen så att ASCII-värden (text) omvandlas till binära värden bör inte vara ett problem.
Detta kan då ske rad för rad (en struct per rad så att säga) och minne till dessa värden måste då reserveras.
Att reservera minne för ett okänd antal parameter-set känns lite konstigt, visst kan man del-allokera minne eftersom det finns fler data i filen som läsas, ett alternativ är att läsa igenom filen en gång först, bara för att kolla antalet som det ska reserveras minne för, sedan läser man om filen och extraherar datan som det ska jobbas med.