fstream i metoda getline()

0

jest kawalek kodu:

ifstream strumienPliku;
char tab[30];
strumienPliku.open("plik.txt", ios::in | ios::binary);
strumienPliku.getline(tab, 30, '\n');

problem:
jak to przerobic by wzytywanie z pliku konczylo sie albo po napotkaniu konca wersu (znak '\n') - tak jak jest powyzej - albo po napotkaniu znaku ":" (dwukropek)? Pytam bo z tego co wyszperalem to metoda getline moze przyjmowac jako parametr tylko jeden znak ktory ma konczyc pobieranie danych, a ja potrzebuje by to dzialalo po napotkaniu jednego z dwoch znakow. Za pomoc dziekuje.

0

stwórz własną funkcję, która będzie dziaąłć analogicznie, np. w stylu
int mojgetline(char *tab, int ile, char *ogr)
{
int i;
for i (0 .. ile)
{
wczytaj znak;
if(znak jest zawarty w tablicy ogr)
dopisz go do tab;
else
{wycofaj ostatni znak z powrotem (lub jeślii tak chcesz go olać to nie wycofuj)}

return i; //zwraca ile znakow wczytal
}

w tabllicy ogr będą te znaki graniczne, tak jak zwykły string.
Wtedy będzie działąć dla dowolnej liczby, i będzie mogło chyba działać w postaci "\n:".
Jeśli wystarczą ci dwa ograniczniki to daj dwa argumenty char zamiast tablicy org.
Możesz tę funkcję zaprzyjaźnić z ifstream wtedy będzie wywołanie z kropką, albo przekazać ifstream jako kolejny argument.

pozdrawiam

0

Oczywiście zamiast
[code] if(znak jest zawarty w tablicy ogr)
dopisz go do tab;[/code]
powinno być

[code] if(znak NIE jest zawarty w tablicy ogr)
dopisz go do tab;[/code]

0

na ten pomysl nie wpadlem. sam nie wiem dla czego, bo juz bardzo kombinowalem a o najprostrzych rozwiazaniach nie pamietalem. [wstyd] pisanie programow po nocy mi nie sluzy. ale piekne dzieki za pomoc. teraz to juz pestka.

0

napisale. moja wersja wyglada tak (moze komus sie przyda):

int ObslugiwaczPliku::mojeGetLine(char gdzie[], int ile, ifstream & strumien, char ogr1, char ogr2)
{
for (int licznik = 0; licznik < ile; licznik++)
{
gdzie[licznik] = strumien.get();
if ((gdzie[licznik] == ogr1) | (gdzie[licznik] == ogr2))
{
gdzie[licznik] = 0;
return licznik;
}; //koniec if
}; //koniec for
return ile;
} //koniec ObslugiwaczPliku::mojeGetLine

jak zrobic zaprzyjaznienie z ifstream by dzialalo wywolanie z kropka? troche kombinowalem ale nie dalem rady. :|

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