Läsa från en fil in till structs i C?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Jennie
Inlägg: 173
Blev medlem: 8 februari 2014, 13:23:00

Läsa från en fil in till structs i C?

Inlägg av Jennie »

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:

Bild

(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).
:)
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46919
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Läsa från en fil in till structs i C?

Inlägg av TomasL »

Gör en union med en Array av bytes, så läser du in byte för byte i den arrayen, så har du dem per automatik i din andra strukt.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Läsa från en fil in till structs i C?

Inlägg av johano »

Kolla in fscanf()

/johan
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Läsa från en fil in till structs i C?

Inlägg av Andax »

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
Användarvisningsbild
bit96
Inlägg: 2528
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Läsa från en fil in till structs i C?

Inlägg av bit96 »

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?
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Läsa från en fil in till structs i C?

Inlägg av Icecap »

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.
Nerre
Inlägg: 27184
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Läsa från en fil in till structs i C?

Inlägg av Nerre »

fscanf är väl betydligt enklare än bit96:s förslag och gör väl i princip samma sak?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Läsa från en fil in till structs i C?

Inlägg av johano »

Ett snabbt exempel helt utan felhantering:

Kod: Markera allt

#include <stdio.h>

#define NUM_VALUES 100

typedef struct
{
    int columnA[NUM_VALUES];
    int columnB[NUM_VALUES];
    int columnC[NUM_VALUES];
} VALUES;

int main(int argc, const char * argv[])
{
    FILE *f = fopen("/Users/johano/values.txt", "r");
    
    VALUES values;
    
    for(int i=0; i < NUM_VALUES && !feof(f); i++)
    {
        fscanf(f, "%d %d %d", &values.columnA[i], &values.columnB[i], &values.columnC[i]);
    }
    
    fclose(f);

    return 0;
}
/johan
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Läsa från en fil in till structs i C?

Inlägg av blueint »

Vad är det för data som du skall läsa in?
Vilka värden kan siffrorna anta som maximalt? förekommer flyttal? negativa tal?
Olika antal siffror per rad?

Beräkningar som skall göras?
Skriv svar