wxWidgets Poszukuję funkcji podobnej do sscanf

0

Cześć,

W C do wyodrębnienia z ciągu znaków np. nazw i numerów posługiwałem się funkcją "sscanf" np. posiadalem ciąg znaków "adam;kowalczyk;111222333"</code> i zapomocą komendy <code class="c"> sscanf(string,"%s;%s;%d\n",dane[i]->imie, dane[i]->nazwisko, &dane[i]->telefon); potrafiłem wyodrębnić imię, nazwisko oraz telefon. Poszukuję funkcji o takich samych właściwościach tylko, aby działa w środowisku wxWidgets. Z góry dziękuję za pomoc.

1

a jaki problem użyć sscanf?

0

Dobra mój błąd. Wcześniej jak starałem się go użyć zrobiłem literówkę, której nie znalazłem. Tak wygląda mój kod:

wxString tekst, tmp;
    int id, symbol;
    float cena;
    wxString nazwa, kategoria;
    tekst = plik.GetFirstLine();
    sscanf(tekst.c_str(),"%d;%d;%s;%f;%s",&id,&symbol,nazwa,&cena,kategoria);
    tmp.Printf("%d",id);
    id_prod -> SetLabel(tmp);
    nazwa_prod -> SetLabel(nazwa); 

Niestety działanie programu zatrzymuje się na linijce sscanf i nie idzie dalej. Linijka tekstu z pliku ma postać:
1;560;Pomidory;2.9;Warzywa

0

Dobra. Wszystko działa, ale tylko wtedy, kiedy separatorami miedzy dany jest spacja:

1 560 Pomidory 26.50 Warzywa
A ja chce, aby linijka jaką pobieram była postaci:

ID{1}SYMBOL{560}NAZWA{Pomidory}CENA{26.50}KATEGORIA{Warzywa}
Ponieważ nazwa produktów będzie się składała z kilku słów.

Niestety kiedy tak zrobię program wiesza się na linijce ze sscanf:

 
    wxString tekst, tmp;
    int id, symbol;
    float cena;
    wxChar nazwa[32], kategoria[32];
    tekst = plik.GetFirstLine();
    sscanf(tekst,"ID{%d}SYMBOL{%d}NAZWA{%s}CENA{%f}KATEGORIA{%s}",&id,&symbol,nazwa,&cena,kategoria);
    tmp.Printf("%d",id);
    id_prod -> SetLabel(tmp);
    tmp.Printf("%d",symbol);
    symbol_prod -> SetLabel(tmp);
    tmp.Printf("%.2f",cena);
    cena_prod -> SetLabel(tmp);
    nazwa_prod -> SetLabel(nazwa);
    kategoria_prod -> SetLabel(kategoria);

Wiecie może czego tak jest?

1 użytkowników online, w tym zalogowanych: 0, gości: 1