Usuwanie zanaków z tablic

0

Witam Serdecznie,
Bawię się z modułem ESP8266 w celu pobrania przez niego danych.
Wszystko działa już prawie dobrze oprócz jednej rzeczy.
Mianowicie układ pobiera mi np. stronę WWW, ale w pewnych miejscach 'dostrzykuje' własne dane: +IPD,1460:
Potrzebowałbym usunąć napis z tablicy który zaczyna się od +IPD,xxxx:

Więc w skrócie co potrzebuję:
mam tablicę **char dane[]**której zawartość jest taka:

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+IPD,1460:22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
+IPD,9:3333333

Co zobić, aby w tablicy usunąć te +IPD,1460:

0

Chyba najłatwiej będzie w pętli to po prostu kopiować (nawet do tego samego miejsca w pamięci), a jak pojawi się wyszukiwana fraza, to ją ominąć. Trzeba tylko trzymać dwa indeksy - odczytu i zapisu - na początku takie same.

0

Hej
Mam problem już na samym początku żeby wydobyć miejsce w tablicy, gdzie zaczyna się string +IPD.
Problem ten jest dlatego, że tablica nie przechowuje tylko danych tekstowych(tak jak napisałem na samym początku) a jest tam np. też 0
Czyli mamy taką tablicę:

uint8_t tablicajpega[51200]={0x21,23,55,32,0,123,'I','P','D',3,1,3,2,11,22,33};

I chciałbym poznać gdzie zaczyna się string , gdyby nie było w tablicy zera, to można byłoby zrobić to tak:

uint8_t *inexstart=strstr(tablicajpega,"IPD");
if(inexstart){
    int16_t lokPoczatek = inexstart - tablicajpega;
}

ale że jest w tablicy 0, to jest rpoblem, gdyż warunek inexstart nigdy nie jest spełniony

0

Napisz sobie funkcję zbliżoną do memcmp, która będzie sprawdzała ten warunek.

0

Po mału idę do przodu:
Dla celów testowych korzystam z takiej tablicy

uint8_t tablicajpega[]={2,3,4,':',21,23,55,32,0,123,'+','I','P','D',',','1','4','6','0',':',3,1,3,2,11,22,33};

Dodatkowo napisałem funkcję, która zwraca mi pozycję interesujących mnie Dzięki temu znam pozycję znaku +, oraz :

int16_t wynik = PokazPozycjeStringu(tablicajpega,"+IPD",80);
int16_t wynikDwukropka=wynik+PokazPozycjeStringu(tablicajpega+wynik,":",80);

Czyli:

wynik=10;
wynikDwukropka=19;

Jak teraz mam się zabrać za usunięcie danych z tablicy od indeksu 10 do 19,
Nie chodzi mi o wypełnienie tej przestrzeni zerami, tylko żeby Przesunąć dane które są od indeksu 19, w miejsce indeksu 10

Tzn chce aby w wyniku uruchomienia funkcji której jeszcze nie mam w tablicajpega były dane:

{2,3,4,':',21,23,55,32,0,123,3,1,3,2,11,22,33};
0

Napisałem jak to zrobić kilka postów temu.

0

Nie do końca to rozumiem,
Mógłbyś jakoś to rozjaśnić? Albo kawałek kodu zaprezentować? Na pewno by mi to pomogło
I dzięki za dotychczasową pomoc

0

Generalnie chcesz coś takiego jak http://en.cppreference.com/w/cpp/algorithm/remove

void clean_string(char* str, size_t size)
{
    int read = 0, write = 0;
    while(read < size) {
        if(match_evil_pattern(str+read, size-read)) {
            read += PATTERN_SIZE;
        } else {
            str[write++] = str[read++];
        }
    }
}

Pisane na szybko, ale generalnie tak to sobie wyobrażałem.

0

Udało się mi to zrobić. ;-)
Dzięki!!

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