Avatar billede duper Nybegynder
17. december 2001 - 23:24 Der er 5 kommentarer og
1 løsning

Hjælp med metoden \"sscanf\" (opdeling af streng ved komma-tegn)

Hej!
Jeg har haft fundet nogle eksempler, men har ikke helt kunne gemmeskue dem.

Jeg har været kommet frem til at metoden virker på følgende måde:
sscanf(<Data der skal opdels>,<Her defines hvor opdelingen skal ske>, <variabler hvor delene skal gemmes>)

Jeg tror det er i den miderste parameter (<Her defines hvor opdelingen skal ske>) hvor jeg gør noget galt.


Min kode:
-----------------
char DataFraFil[120];
Ind.getline(DataFraFil,120);

String ID, Navn, Afdeling, Indmeldelsesaar;
sscanf(DataFraFil,\"[^,],[^,],[^,],[^,]\",ID, Navn, Afdeling, Indmeldelsesaar);

--------------------
En linie der indlæses i variablen DataFraFil kunne se følgende ud:
2,Ole Olsen,salg,1999

---------------------
Håber nogen kan hjælpe :0)

/Sune
NB: Der er altid 4 elementer i Linien der skal opdeles
Avatar billede jpk Nybegynder
18. december 2001 - 08:27 #1
Fra MSDN

/* SSCANF.C: This program uses sscanf to read data items
* from a string named tokenstring, then displays them.
*/

#include <stdio.h>

void main( void )
{
  char  tokenstring[] = \"15 12 14...\";
  char  s[81];
  char  c;
  int  i;
  float fp;

  /* Input various data from tokenstring: */
  sscanf( tokenstring, \"%s\", s );
  sscanf( tokenstring, \"%c\", &c );
  sscanf( tokenstring, \"%d\", &i );
  sscanf( tokenstring, \"%f\", &fp );

  /* Output the data read */
  printf( \"String    = %s\\n\", s );
  printf( \"Character = %c\\n\", c );
  printf( \"Integer:  = %d\\n\", i );
  printf( \"Real:    = %f\\n\", fp );
}


Output

String    = 15
Character = 1
Integer:  = 15
Real:    = 15.000000

Avatar billede jpk Nybegynder
18. december 2001 - 09:49 #2
Jeg tror kun den virker når der er mellemrum mellem dine værdier!

Fx;
string str=\"Hej 123 4.56\";
string s;
int n;
float f;
sscanf(str, \"%s%d%f\", s, n, f);

%s = string
%d = int
%f = float/double

Avatar billede duper Nybegynder
18. december 2001 - 13:27 #3
Så vidt jeg har kunne se på de andre eksempler jeg har haft fundet tidligere kan det godt lade sig gøre med andre tegn end mellemrum.

Jeg har endnu ikke med ovenstående eksempel kunne få metoden til at virke efter hensigten (heller ikke hvis jeg skiftede kommaerne ud med mellemrum).
Jeg skal nok have eksemplet skåret lidt mere ud i pap, da jeg er newbie til C++.

Jeg forstår hvis det kræver lidt flere point, men nu har jeg løst det manuelt ved at skrive en masse kode, der udfører det samme. (ikke nær så smukt og kort, men det virker).

/sune
Avatar billede jpk Nybegynder
18. december 2001 - 14:12 #4
Du skal jo bruge % + tegn der repræsenterer variablens type.
fx betyder %d int, %s streng og %f float/double.

Avatar billede duper Nybegynder
18. december 2001 - 16:22 #5
Det har jeg også prøvet, men fik det ikke til at virke.

Du har prøvet at hjælpe og det du har skrvet er rigtig, så får anstrengelserne får du pointe. Oprettet du et svar, så jeg kan acceptere.

Og mange tak for hjælpen :0)

/Sune
Avatar billede jpk Nybegynder
19. december 2001 - 08:54 #6
Prøv at se dette eksempel:

    char DataFraFil[120] = \"2,Ole Olsen,salg,1999\";
    char o[10], f[10], s[10], t[10];
    sscanf(DataFraFil, \"%[^\',\'],%[^\',\'],%[^\',\'],%s\", o, s, t, f);

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