Avatar billede piopakk Nybegynder
01. februar 2006 - 19:49 Der er 17 kommentarer og
1 løsning

fread til 3 variabler

Et c - spørgsmål.

Jeg har en fil, som konstant genererer en strøm af informationer, der har formatet "kontonr \t værdi \t bankbogstav \n".
Eksempelvis: "4420307719    2    F"
Disse info vil jeg gerne gemme i tre variabler, som gemmes i en struct. Således at kontonr gemmes i én variabel osv.

Jeg har prøvet at udskrive indholdet ved hjælp af fread(), idet jeg gemmer indholdet i en buffer og printer den ud på skærmen. Men jeg kan bare ikke adskille de 3 informationer.

For at gemme i en struct, har jeg forsøgt mig med pointere, men det lader ikke til at virke.

hvad kan man gøre?
Avatar billede arne_v Ekspert
01. februar 2006 - 20:01 #1
enten laeser du en linie med fgets og splitter med strtok

eller saa laeser du med fscanf og "%s\t%s\t%s"
Avatar billede arne_v Ekspert
01. februar 2006 - 20:06 #2
du kopierer saa data til din struct

og hvis tallene er int saa konverterer du med atoi
Avatar billede piopakk Nybegynder
01. februar 2006 - 22:20 #3
kan du komme med konkrete eksempler på fgets/fscanf
Avatar billede bertelbrander Novice
01. februar 2006 - 22:49 #4
#include <stdio.h>

typedef struct
{
  char KontoNummer[1024];
  int  Value;
  char BankBogstav;
}KontoInfoStruct;

int main()
{
  FILE *f = fopen("test.dat", "rt");
  KontoInfoStruct KontoInfo;

  if(!f)
  {
      fprintf(stderr, "Failed to open test.dat\n");
      return 0;
  }
  while(fscanf(f, "%[^\t]\t%d\t%c\n", KontoInfo.KontoNummer, &KontoInfo.Value, &KontoInfo.BankBogstav) == 3)
  {
      /* Process Info */
      printf("%s %d %c\n", KontoInfo.KontoNummer, KontoInfo.Value, KontoInfo.BankBogstav);
  }
  fclose(f);
  return 0;
}
Avatar billede piopakk Nybegynder
01. februar 2006 - 23:10 #5
Når jeg kører dit program, sker der ingenting. Det kompilerer fint, og når jeg exekuterer programmet sker der intet, og jeg ryger tilbage til prompten.
Avatar billede bertelbrander Novice
01. februar 2006 - 23:24 #6
Du kan putte en:
  getchar();

Ind lige inden return 0 (begge tilfælde) så kan du se om der sker noget.

Hvordan ser din test.dat fil nøjagtigt ud? Koden er temmelig nøjeregnene.
Avatar billede piopakk Nybegynder
01. februar 2006 - 23:35 #7
med getchar() før return 0, sker der blot det, at jeg får lov at taste noget og trykke enter, og derefter ryger jeg tilbage til prompten.

min test fil hedder "stream" og den spytter hele tiden tilfældige linjer ud som eks.:
"4420307719    2    F"
"3165871023    1    A"
"4545778890    5    C"
Avatar billede piopakk Nybegynder
01. februar 2006 - 23:38 #8
så jeg vil have 4420307719 skal gemmes i kontonummer i struct'en, '2' skal gemmes i value i struct'en, og 'F' skal gemmes i bankbogstav i struct'en.
og herefter printes ud, men det er så også det din kode gør tror jeg
Avatar billede piopakk Nybegynder
01. februar 2006 - 23:45 #9
det er while løkken der er noget galt med, kan bare ik se hvad.. noget i fscanf
Avatar billede bertelbrander Novice
01. februar 2006 - 23:52 #10
Du har "" omkring hver linie, dem må vi lige scanne også.

  while(fscanf(f, "\"%[^\t]\t%d\t%c\"\n", KontoInfo.KontoNummer, &KontoInfo.Value, &KontoInfo.BankBogstav) == 3)
  {
      /* Process Info */
      printf("%s %d %c\n", KontoInfo.KontoNummer, KontoInfo.Value, KontoInfo.BankBogstav);
  }
Avatar billede piopakk Nybegynder
01. februar 2006 - 23:53 #11
nej sorry det bare for at illustrere en ny linje. der kommer ikke "" med
Avatar billede bertelbrander Novice
02. februar 2006 - 00:01 #12
Er der mellemrums tegn i linierne?
Avatar billede piopakk Nybegynder
02. februar 2006 - 00:03 #13
nej det er bare \t (tabulator indrykning)
Avatar billede bertelbrander Novice
02. februar 2006 - 00:05 #14
Kan du sende mig en af filerne?
bertel @ post4 . tele . dk
Avatar billede arne_v Ekspert
02. februar 2006 - 04:07 #15
det boer virke

jeg synes stadigt at med data saa er "%s\t%d\t%c\n" nemmere og bedre
Avatar billede piopakk Nybegynder
27. december 2009 - 09:12 #16
bertelbrander kan du skrive et svar jeg kan acceptere?

Er ved at følge op på tidligere uaflukkede spørgsmål.

Tusind tak for hjælpen!
Avatar billede bertelbrander Novice
27. december 2009 - 11:50 #17
Jeg samler ikke på point. Lav selv et svar og accepter det.
Avatar billede piopakk Nybegynder
27. december 2009 - 12:56 #18
ok så :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester