Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

odczytywanie z pliku i zapis do innego

Ostatnio zmodyfikowano 2014-01-08 10:36
Autor Wiadomość
operation_argo
Temat założony przez niniejszego użytkownika
odczytywanie z pliku i zapis do innego
» 2014-01-07 18:36:19
Jest ktos w stanie wytlumaczyc w jaki sposób napisać program by w pliku wyszukal
<tekst>mam problem </tekst>...... i wypisal w drugim pliku "mam problem" ?
P-101525
00Andre
» 2014-01-08 01:02:04
Najlepiej było by wyczytać plik i wszystkie wyczytane linie wrzucać na koniec vectora.
Potem pętlą w każdej lini wyszukać w stringu głównych wyrazów ( <tekst> i </tekst> ) np
C/C++
for( unsigned a = 0; a < linie_pliku.size(); a++ )
{
    size_t Szukanie1 = linie_pliku[ a ].find( "<tekst>" );
   
    if( Szukanie1 != string::npos )
    {
       
        // Szukanie teraz drugiego
        size_t Szukanie2 = linie_pliku[ a ].find( "</tekst>" );
       
        // Ustawiamy na prawde
        kontrol_2 = true;
       
        // Sprawdzamy
        if( Szukanie2 != string::npos )
        {
            // Ta linijke w ktorej znajduje sie <tekst>....</tekst> dajesz do drugiego vektora
            linietekst.push_back( linie_pliku );
           
            // Ustawiamy na prawde
            kontrol_1 = true;
           
            // Zatrzymanie petli
            break;
        }
        else kontrol_1 = false; // Dobrze aby ustawić takie jakby kontrolki(bool) aby potem sprawdzać czy jest
       
    }
    else kontrol_2 = false;
   

A potem ta linijkę która zawiera nasze <tekst>masz problem</tekst> trzeba usunąć te całą resztę za pomocą funkcji tekst.erase(pozycja do usuwania, ilość znaków do usunięcia).
Oczywiście jak usuniesz wszystko i zostanie sam "mam problem" to normalnie zapisujesz do innego pliku czy jak tam chcesz
P-101557
alixir
» 2014-01-08 10:36:53
Można to też zrobić bezpośrednio przeszukując plik linia po linii i kopiować wszystko od znacznika <tekst> aż do napotkania znacznika </tekst>

Tu przykładowy program:

C/C++
#include <string>
#include <iostream>
#include <fstream>

size_t szukaj( std::string & tekst, std::string szukanyWyraz )
{
    size_t poz = tekst.find( szukanyWyraz );
    return poz;
}

int main() {
    std::fstream plik1;
    std::fstream plik2;
   
    plik1.open( "plik1.txt", std::ios::in );
    if( plik1.good() ) {
       
        while( !plik1.eof() ) {
            std::string linia;
            std::getline( plik1, linia );
           
            std::string buf;
           
            size_t pozycja_pocz = szukaj( linia, "<tekst>" );
            if( pozycja_pocz != std::string::npos ) { // jesli znaleziono poczatek
               
                pozycja_pocz += 7; // przesuwamy poczatek o dlugosc <tekst>
               
                plik2.open( "plik2.txt", std::ios::out ); // otwieramy drugi plik do zapisu
                if( plik2.good() ) {
                   
                    size_t pozycja_kon = szukaj( linia, "</tekst>" );
                    while( pozycja_kon == std::string::npos ) { // wykonuj dopoki nie znaleziono konca
                        buf = "";
                        buf.insert( 0, linia, pozycja_pocz, linia.length() - pozycja_pocz ); // kopiuj tekst do bufora
                        plik2 << buf << "\n"; // dopisz zawartosc bufora do pliku
                        pozycja_pocz = 0; // ustaw pozycje poczatkowa na 0
                        std::getline( plik1, linia ); // pobierz nowa linie
                        pozycja_kon = szukaj( linia, "</tekst>" ); // wyszukaj koniec
                    }
                   
                    buf = "";
                    buf.insert( 0, linia, pozycja_pocz, pozycja_kon - pozycja_pocz ); // skopiuj tekst do bufora
                    plik2 << buf << "\n"; // dopisz zawartosc bufora do pliku
                   
                    plik2.close();
                }
                else {
                    std::cout << "Nie udalo sie otworzyc pliku do zapisu!" << std::endl;
                    return 1;
                }
            }
        }
        plik1.close();
    }
    else {
        std::cout << "Nie udalo sie otworzyc pliku do odczytu!" << std::endl;
        return 1;
    }
   
    return 0;
}
P-101563
« 1 »
  Strona 1 z 1