Avatar billede Slettet bruger
04. marts 2004 - 09:14 Der er 14 kommentarer og
1 løsning

Hnete data fra fil

Jeg har et problem i forbindelse med det program.

Datafilens udseene:

Tekst1
Tal1
Tal11

Tekst2
Tal2
Tal

Programmet skal finde en tekststreng (tekst1) i filen, hente denne tekst streng i en variabel. Herefter skal Tal1 og Tal11 ligges i hver deres variabel.

Programmet skal så kører hele filen igennem og finde alle disse data, nok en while løkke.

Nogen gode forslag?!
Avatar billede arne_v Ekspert
04. marts 2004 - 09:39 #1
Det kan laves på mange måder. Her er noget C kode:

FILE *fp;
char line[100],tekst[100];
int tala,talb;
fp = fopen("filnavn.typ", "r");
while(!feof(fp))
{
  fgets(line,sizeof(line),fp);
  strcpy(tekst,line);
  tekst[strlen(tekst)-1] = '\0';
  fgets(line,sizeof(line),fp);
  tala = atoi(line);
  fgets(line,sizeof(line),fp);
  talb = atoi(line);
  fgets(line,sizeof(line),fp);
  /* process tekst, tala og talb */
}
fclose(fp);
Avatar billede Slettet bruger
04. marts 2004 - 09:54 #2
Shit.. det er C++
Avatar billede arne_v Ekspert
04. marts 2004 - 09:56 #3
Ovenstående kode virker også i C++ !

I C++ er der bare flere muligheder end i C.
Avatar billede Slettet bruger
04. marts 2004 - 11:11 #4
Jeg får en del fejl, er der andre header filer jeg bør inkludere end:
#include <iostream>
#include <fstream>
Avatar billede arne_v Ekspert
04. marts 2004 - 11:14 #5
#include <cstdio>
#include <cstdlib>
Avatar billede Slettet bruger
04. marts 2004 - 11:16 #6
Får stadig følgende fejl:

--------------------Configuration: Hente - Win32 Debug--------------------
Compiling...
Hentetal.cpp
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(9) : error C2501: 'fp' : missing storage-class or type specifiers
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(9) : error C2040: 'fp' : 'int' differs in levels of indirection from 'struct _iobuf *'
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(9) : error C2440: 'initializing' : cannot convert from 'struct _iobuf *' to 'int'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(10) : error C2143: syntax error : missing ';' before 'while'
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(11) : error C2143: syntax error : missing ';' before '{'
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(11) : error C2447: missing function header (old-style formal list?)
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(22) : error C2501: 'fclose' : missing storage-class or type specifiers
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(22) : error C2373: 'fclose' : redefinition; different type modifiers
        c:\programmer\microsoft visual studio\vc98\include\stdio.h(285) : see declaration of 'fclose'
C:\Documents and Settings\Dokumenter\C++\Hentetal.cpp(22) : error C2440: 'initializing' : cannot convert from 'struct _iobuf *' to 'int'
        This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Error executing cl.exe.

Hentetal.obj - 9 error(s), 0 warning(s)
Avatar billede arne_v Ekspert
04. marts 2004 - 11:24 #7
Har du den her linie med:

FILE *fp;

?
Avatar billede Slettet bruger
04. marts 2004 - 12:21 #8
koden ser ud som følgr.

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>

FILE *fp;
char line[100],tekst[100];
int tala,talb;
fp = fopen("filnavn.typ", "r");
while(!feof(fp))
{
  fgets(line,sizeof(line),fp);
  strcpy(tekst,line);
  tekst[strlen(tekst)-1] = '\0';
  fgets(line,sizeof(line),fp);
  tala = atoi(line);
  fgets(line,sizeof(line),fp);
  talb = atoi(line);
  fgets(line,sizeof(line),fp);
  /* process tekst, tala og talb */
}
fclose(fp);
Avatar billede arne_v Ekspert
04. marts 2004 - 12:47 #9
Der mangler vist lidt skelet omkring koden.
Avatar billede arne_v Ekspert
04. marts 2004 - 12:48 #10
Komplet eksempel (stadig C style):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  FILE *fp;
  char line[100],tekst[100];
  int tala,talb;
  fp = fopen("r.dat", "r");
  while(!feof(fp))
  {
    fgets(line,sizeof(line),fp);
    strcpy(tekst,line);
    tekst[strlen(tekst)-1] = '\0';
    fgets(line,sizeof(line),fp);
    tala = atoi(line);
    fgets(line,sizeof(line),fp);
    talb = atoi(line);
    fgets(line,sizeof(line),fp);
    printf("%s %d %d\n",tekst,tala,talb);
  }
  fclose(fp);
  return 0;
}
Avatar billede Slettet bruger
04. marts 2004 - 13:35 #11
Når jeg kompilere det og kører det kommer win med en fejl og lukker ned for cmd.
Avatar billede arne_v Ekspert
04. marts 2004 - 17:49 #12
Hvilken fejl ?
Avatar billede Slettet bruger
08. marts 2004 - 07:52 #13
Den skriver bare at filen har fundet en fejl og afsluttes.. bla bla og om man vil sende en fejlrapport til MS

Fejlrapporten indeholder bla.:

AppName: cpp1.exe    AppVer: 0.0.0.0    ModName: cpp1.exe
ModVer: 0.0.0.0    Offset: 0000cf36
Avatar billede arne_v Ekspert
08. marts 2004 - 20:42 #14
Umiddelbart er der ikke noget som burde kunne få det program til at gå i brædderne.

Eksisterer filen ?

Og er den i det beskrevne format:
tekst
tal
tal
blank
...
?
Avatar billede Slettet bruger
09. marts 2004 - 13:24 #15
JA det er sådan som beskrevet. Men det er okay, vi lukker bare spm her, har lavet et andet med en viderbygning.

Men tak for hjælpen.
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