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

[C++] Pobieranie danych z pliku od pewnego momentu.

Ostatnio zmodyfikowano 2012-12-24 20:32
Autor Wiadomość
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)

C/C++
#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?
P-71820
xevuel
» 2012-12-24 08:18:26
Złącz wszystkie linijki w jedną zmienną:
C/C++
std::string zawartosc_pliku = "";
std::string linijka = "";
while( !plik.eof() )
{
    //odczytaj linijkę
    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()
P-71829
Worie
Temat założony przez niniejszego użytkownika
» 2012-12-24 14:32:14
Dziękuje za naprowadzenie, coś skleiłem z kursu:
C/C++
#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;
?>
P-71853
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()
P-71864
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!
P-71884
1 « 2 »
Poprzednia strona Strona 2 z 2