Worie Temat założony przez niniejszego użytkownika |
» 2012-12-23 22:50:51 W sumie ... Pewnie i lepiej, z tym , że nadal nie wiem jak się za to zabrać. Czytałem lekcje o stringu z tym ze tam są podstawowe funkcje (pewnie beda uzyte ale nie mowi mi wiele to) #include <iostream> #include <fstream> #include <conio.h> using namespace std; int main() { fstream plik; plik.open( "dane.txt", ios::in ); if( plik.good() ) { string napis; cout << "Zawartosc pliku:" << endl; while( !plik.eof() ) { getline( plik, napis ); cout << napis << endl; } plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; getch(); return( 0 ); } Jeśli pobieramy dane liniowo, to w tej pętli pobierane są dane do napis i z każdym przebiegiem wartość napis jest zmieniana, tak? Czyli jeśli chce praktycznie zedytować plik tylko o pewną wartość, to czy: 1. Musze pobrać wszystkie linijki, przypisac każdą do Tablicy 2. Linijkę , w której występuje ciąg znaków np "$zmienna1 =" musze zmienić (jak sprawdzic czy w stringu występuje ciąg znaków? wyczytałem , ze compare , ale jak?) 3. Zapisac ponownie wszystko do pliku w odpowiedniej kolejności Czy generalnie dobrze rozumuje, czy miałeś na myśli coś innego? |
|
xevuel |
» 2012-12-24 08:18:26 Złącz wszystkie linijki w jedną zmienną: std::string zawartosc_pliku = ""; std::string linijka = ""; while( !plik.eof() ) { zawartosc_pliku += linijka; } (jak sprawdzic czy w stringu występuje ciąg znaków? wyczytałem , ze compare , ale jak?) | std::string::find()A żeby obciąć wybrany kawałek tekstu: std::string::substr() |
|
Worie Temat założony przez niniejszego użytkownika |
» 2012-12-24 14:32:14 Dziękuje za naprowadzenie, coś skleiłem z kursu: #include <iostream> #include <fstream> #include <conio.h> #include <string> using namespace std; int main() { string wyszukaj = "$droponly = ", linijka, zawartosc_pliku = ""; size_t found; fstream plik; plik.open( "dane.txt", ios::in ); if( plik.good() ) { cout << "Zawartosc pliku:" << endl; while( !plik.eof() ) { getline( plik, linijka ); zawartosc_pliku += linijka + "\n"; } cout << zawartosc_pliku << endl << endl << endl; cout << "Dlugosc wyszukaj to: " << wyszukaj.length() << endl; found = zawartosc_pliku.find( wyszukaj ); if( found != string::npos ) cout << "Znalazlem \"" << wyszukaj << "\" na:" << int( found ) << endl; cout << "Dzialamy od " << wyszukaj.length() + int( found ) << " pozycji" << endl; plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!" << endl; getch(); return( 0 ); } Teraz nie wiem, jak od tej pozycji którą program znajduje, wywalić tekst do końca linijki (nie pozycjami, bo długość może być zawsze różna) i wstawić wartość która podał użytkownik. Wstawianie rozumiem ze trzeba przez std::string::insert() , podając pozycje od której po prostu ma to wpisać? Jeśli tak to nie wiem właśnie jeszcze jak wyciąć tekst do końca linijki. Zawartość dane.txt: <? $itemplace = 'righthand'; $droponly = 0; $minimum = 2; $premium = 1; $prize = 200; $spellhp = 0; $spellmana = 0; $itematack = 4; $itemdefence = 0; $itemzrecznosc = 3; $axeadd = 0; $swordadd = 0; $distanceadd = 0; $clubadd = 0; $magicadd = 0; $firemagicadd = 0; $watermagicadd = 0; $airmagicadd = 0; $earthmagicadd = 0; $lightmagicadd = 0; $twohanded = 0; ?> |
|
xevuel |
» 2012-12-24 15:57:28 Wczytaj do zmiennej, podmień dany tekst w zmiennej, zapisz zmienną do pliku. nie pozycjami, bo długość może być zawsze różna |
Dlatego podałem Ci sposób na znalezienie tej pozycji... a jak chcesz podmienić, to std::string::replace() |
|
Worie Temat założony przez niniejszego użytkownika |
» 2012-12-24 20:32:24 Dzięki serdeczne, ukończyłem to co miałem. Nie wiem czy na takiej zasadzie jaką mi sugerowałeś, jednak pobierałem lokalizacje poszukiwanej frazy, potem lokalizacje następnego srednika,i to co jest pomiędzy tymi dwoma zastępuje zmienną którą podaje użytkownik. Jeśli coś mi będzie siadać odezwe się
Wielkie dzięki za pomoc, jeszcze raz wesołych swiat! |
|
1 « 2 » |