logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać funkcję znajdź i zamień w C++ dla pliku tekstowego?

n0e 23 Cze 2007 00:21 4011 7
REKLAMA
  • #1 4011502
    n0e
    Poziom 11  
    Posty: 10
    Witam
    Zastanawiam sie jak skonstruowac funkcje, ktora wykonywalaby to co popularne "znajdz i zamien" w edytorach tekstu. Chodzi mi o wyszukanie wszystkich wystapien konkretnego stringa w pliku tekstowym i zamiane na innego. Problem teoretycznie trywialny ale nie wiem jak sie za to zabrac. Myslalem pierwotnie o wczytaniu calego pliku do pamieci, i wtedy uzyciu jakichs operacji na stringach, po czym nadpisaniu pliku txt tym co jest w pamieci ale nie jestem pewien jak to zrobic. Z gory dzieki za sugestie.
  • REKLAMA
  • #2 4011700
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 43
    Możesz z pliku pobierać kolejne linie tekstu,następnie z pobranej linii wydzielać kolejne słowa (string'i) i fcją strcmp (szKey,szInput) szukać wystąpienia zadanego słowa. Po znalezieniu wystąpienia możesz z linii wyciąć znalezione słowo (string) i zastąpić go innym. Następnie daną linię wpisać do nowo utworzonego pliku.
  • REKLAMA
  • #4 4016290
    ed-ek
    Poziom 34  
    Posty: 1814
    Pomógł: 275
    Ocena: 43
    krzychoocpp: algorytmy w linku są b. ciekawe. Jednak sądzę,że autorowi postu codziło o zamianę słowa w tekście.Np jeżeli mamy:
    "adewr ert ade oert ade"
    i chcemy zamienić "ade" na "oooo" ,to program musi to zrobić i ma być:
    "adewr ert oooo oert oooo"
    Ale podane algorytmy podadzą że również w słowie "adewr" występuje "ade".
    Napisałem taki program,ale autor się nie odzywa,może pisze program i jak skończy to się pochwali (mam nadzieję).
  • REKLAMA
  • #5 4016397
    n0e
    Poziom 11  
    Posty: 10
    caly czas rozpracowuje jak to powinno dzialac :) choc nie chodzi mi akurat o cale slowo, chodzi mi takze o fragment slowa... czyli w slowie 'abcde' zamiast 'cd' chcialbym przykladowo 'aa'. mysle ze wykorzystam po prostu funkcje z bibliotek cstdio i cstring.
  • REKLAMA
  • #6 4020838
    Konto nie istnieje
    Konto nie istnieje  
  • #7 4021669
    n0e
    Poziom 11  
    Posty: 10
    dzieki za odpowiedzi ale wczoraj udalo mi sie samemu to rozpracowac. moj kodzik wyglada mniej wiecej tak:

    
      long size;
      char * buffer;
      size_t result,found;
      string strSearch = Edit1->Text.c_str(); //nowa wartosc
      string strAdres = Edit2->Text.c_str(); //stara wartosc
    
      ifstream infile ("test.txt");
      if (!infile.is_open())
            {
            MessageBox(NULL,"File open error",NULL,MB_OK|MB_ICONWARNING);
            return;
            }
    
      infile.seekg(0,ifstream::end);
      size=infile.tellg();
      infile.seekg(0);
    
      buffer = new char [size];
      if (buffer == NULL)
            {
            MessageBox(NULL,"Memory allocation error",NULL,MB_OK|MB_ICONWARNING);
            return;
            }
    
      infile.read (buffer,size);
      infile.close();
      
      string strString1(buffer);
      found=strString1.find(strAdres);
      while (found!=string::npos)
           {
           strString1.replace(found,strAdres.length(),strSearch);
           found=strString1.find(strAdres,found+1);
           }
    
      ofstream outfile ("test.txt");
      if (outfile.is_open())
      {
            outfile.write(strString1.c_str(),strString1.length());
            outfile.close();
      }
    
      delete[] buffer;
    
  • #8 4022341
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy implementacji funkcji "znajdź i zamień" w C++ dla pliku tekstowego. Proponowane podejścia obejmują wczytanie pliku linia po linii, wyszukiwanie i zamianę słów lub fragmentów tekstu w każdej linii za pomocą funkcji porównujących stringi (np. strcmp) oraz zapisywanie zmodyfikowanych linii do nowego pliku. Alternatywnie sugerowano wczytanie całej zawartości pliku do pamięci jako pojedynczy string, a następnie wykorzystanie metod klasy std::string do wyszukiwania i zamiany podłańcuchów. Przykładowy kod pokazuje użycie strumieni ifstream do odczytu pliku, dynamiczne alokowanie bufora, a następnie operacje na stringach w celu znalezienia i zamiany tekstu. Poruszono także kwestie rozróżnienia zamiany całych słów od fragmentów słów oraz wykorzystania bibliotek standardowych C++ (cstdio, cstring, fstream, string). Wskazano na potrzebę uwzględnienia poprawnego zarządzania pamięcią i obsługi błędów przy otwieraniu pliku. Dyskusja zawierała również link do zewnętrznych materiałów dotyczących algorytmów operacji na tekstach.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA