Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[c] odczytanie sformatowanego tekstu z łańcucha

arturromarr 18 Kwi 2017 20:20 429 3
  • #1 18 Kwi 2017 20:20
    arturromarr
    Poziom 17  

    Witam,
    Zapisuję i odczytuję dane z pliku. W każdym wierszu znajduje się dana liczbowa i jej opis.
    Odczytuję poleceniem:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Problem pojawia się gdy opis zawiera więcej niż jedno słowo gdyż funkcja traktuję spację jako koniec zmiennej.
    Czy jest jakaś prosta metoda odczytania za liczbą wszystkich pozostałych znaków razem ze spacjami.
    Przychodzi mi do głowy sprawdzanie ilości znaków w liczbie i kopiowanie z bufora od znaku za liczbą.
    Chciałem się wcześniej poradzić czy może nie da się jakoś sformatować polecenia sscanf, lub użyć innego by zrobić to prościej?
    Będę wdzięczny za jakieś sugestie, bo nie chcę robić jakiejś dziwnej konstrukcji jeśli istnieje prosty zapis.
    Pozdrawiam

    0 3
  • #2 18 Kwi 2017 22:01
    bogiebog
    Specjalista Sieci, Internet

    int danas = atoi(bufor)
    char * reszta = strtokstrchr(buf, ' ') // ustaw reszta na 1szej spacji
    if(reszta)
    strcpy(strOpis, reszta+1); // +1 aby przeskoczyć spację

    0
  • #3 19 Kwi 2017 20:43
    arturromarr
    Poziom 17  

    Coś mi to nie działa.
    Przepisuje do komentarza pierwszą wartość bez pierwszego znaku.
    funkcja strtok nie przyjmuje jako argumentu ' ', musiałem zrobić " ", ale nie wiem czy to daje ten sam efekt.
    Zrobiłem to co chciałem w inny sposób, ale zapis jest koszmarny:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #4 19 Kwi 2017 21:04
    bogiebog
    Specjalista Sieci, Internet

    bogiebog napisał:
    char * reszta = strtok(buf, ' ') // ustaw reszta na 1szej spacji

    mea culpa
    strchr powinno być zamiast strtok

    Dodano po 2 [minuty]:

    arturromarr napisał:
    strcpy(strOpis, bufor+strlen(itoa(dana,10))+1);


    a co jeśli linia będzie
    +44 reszta blah

    wtedy twój kod wczyta opis ze spacją " reszta blah"

    0