sscanf

Fórumok

sscanf

Hozzászólások

Üdv

"TIP: 2005/11/07 13:59,00:00:00,000,1162,Z,123456,98765,asdfg,,,1,,"

A fenti stringet szeretném felbontani a ',' mentén

a sscanf el próbáltam de nem veszi figyelembe a vesszőket


sscanf ( str, "TIP:%s %s,%s,%s",a1,a2,a3,a4);

if (debug||foreground) printf("Split utan::>%s::: %s::: %s::::%s\n",a1,a2,a3,a4);

a fenti kód ezt adja vissza

Split utan::>2005/11/07::: 13:59,00:00:00,000,1162,Z,123456,98765,asdfg,,1,,:::::::

Mit csinálok rosszul?

Üdv Robit

[/i]

Feltétlenül beépített függvényt kell használnod a feladat megoldásához, mert néha a legegyszerübb ha az ember kézimunkához folyamodik.
[code:1:7f8d776521]#include <stdio.h>
#define VOLT 1
#define NEMVOLT 0

int main(int argc,char* argv[])
{
char* str="TIP: 2005/11/07 13:59,00:00:00,000,1162,Z,123456,98765,asdfg,,,1,,";
int vesszo = NEMVOLT;
int i=0;
while(str[i] != '\0')
{
if(str[i] == ',')
{
vesszo = VOLT;
i++;
continue;
}
printf(vesszo ? "\n%c" : "%c",str[i]);
i++;
vesszo = NEMVOLT;
}
return 0;
}[/code:1:7f8d776521]

Futási eredmény:
[code:1:7f8d776521]TIP: 2005/11/07 13:59
00:00:00
000
1162
Z
123456
98765
asdfg
1[/code:1:7f8d776521]

[quote:b34d39eef4="meditor"]Én strtok()-kal szeletelném föl.

Szia!

ezzel próbáltam elősször de az volt a gond hogy ha két ',' között nincs semmi akkor elcsúsztak az értékek
pl
a1,a2,,a4 ha ezt egy tömbbe pakoltam akkor
arr[1]=>a1
arr[2]=>a2
arr[3]=>a4
arr[4]=>
lett
ezért próbálkoztam a sscanf el.
ha tudsz írni egy müködő példát strok() ra megköszönöm
de erőssen érdekel mindemellet hogy mért nem megy a sscanf

Üdv
Robit

Az ember azt várná, hogy ha 2 delimiter van egymás után, akkor
null pointerrel tér vissza. (Bevallom a példádhoz hasonló kísérletet még
nem végeztem.)

strsep(3)-pel is megnézhetnéd. a man-ja értelmében "azért hozták létre, mert az strtok(3) funkció nem volt képes az üres mezők kezelésére".
hajrá.