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

[C++] Wczytywanie danych, fstream

Ostatnio zmodyfikowano 2013-11-05 18:55
Autor Wiadomość
Vister26
Temat założony przez niniejszego użytkownika
[C++] Wczytywanie danych, fstream
» 2013-11-04 22:07:11
Hej, być może coś pominąłem w poradniku do fstream'a, ale nie mogę zrozumieć jak wczytać z pliku następujące dane

C/C++
//plik config.txt
//Druga linijka
//Trzecia linijka...
costam = "wyraz" // costam to : char * costam;
Jak to zrobić aby program wczytał wyraz do zmiennej z 4 linijki pliku config.txt? Da się to w ogóle zrobić, bo chciałem aby mój config wyglądał jak taki pseudokod?
P-95306
den93
» 2013-11-04 22:20:47
Oczywiście, że się da :). Naskrobałeś już coś? Czy nie wiesz jak zacząć?
P-95307
Vister26
Temat założony przez niniejszego użytkownika
» 2013-11-04 22:29:28
Wiem, że muszę przesunąć wczytywanie do czwartej linijki a następnie zacząć wczytywanie ale nie z całej linijki. A nie mam pojęcia jak zrobić to "przesunięcie". Nie wiem też czym wczytać te dane bo wszystkie funkcje, które są w kursie pobierają całą linię.
P-95309
Wasilek
» 2013-11-04 22:46:39
P-95310
den93
» 2013-11-04 22:57:03
No tak, pobierasz całą linie z pliku do bufora (pamięci), np. do std::string lub tablicy znaków i dopiero wtedy wykonujesz określone operacje, przesunięcia itp. ale już na danych w pamięci (tak jest szybciej i wygodniej; czyli bez odpowiedniego algorytmu, funkcji się nie obędzie, bo std::fstream zawiera tylko podstawowe rzeczy, nie do tego to służy).
1. Umiesz operować na stringach? Znasz podstawowe funkcje?
2. Czemu ci tak zależy na tej czwartej linijce :P
3. W tym pliku każda dana jest zapisana w takiej postaci:
klucz = "napis"
?
4. Czy 'klucz' jest ci do czegoś potrzebny?
5. Wiesz co to jest std::map?

Może podaj trochę więcej informacji, bo tak to ogólnie napisałeś, że nie wiem co konkretnie chcesz osiągnąć.
P-95312
ktos-tam
» 2013-11-05 17:24:30
Jaki masz problem wczytaj całą linijkę, a później wybierz, co ci potrzebne, a resztę wywal(find).
P-95355
Vister26
Temat założony przez niniejszego użytkownika
» 2013-11-05 17:43:40
@den93:

1.Tak
2.To może być nawet w 20 linijce, tutaj dałem taki przykład z mojego aktualnego configu ;)
3.Póki co, tak.
4.Nie te dane mogą być nawet zapisane w kolejnych linijkach czyli np:
C/C++
wyraz1
wyraz2
wyraz3
ale ja chciałem aby ten plik zawierał komentarze i pseudo-przypisywanie wartości, aby lepiej wyglądał i był zrozumiały też dla innych.
5.std::map jeszcze nie widziałem, ale poczytam.

Wzorując się na odpowiedzi Buby w tym temacie napisałem coś takiego (na przykładzie IP bo jego wczytanie sprawia mi problem):

C/C++
//using namespace std;

ifstream plik; // Zmienna plikowa
plik.open( "config.txt" ); // Otwieramy config.txt
plik.seekg( 4 ); // Przechodzimy do 4 linijki :D
char IPBuffer[ 20 ]; // Tworzymy bufora
plik >> IPBuffer; // Zapisujemy cala linijke do bufora
char * IP;

//tutaj mam problem bo wiem jak "obciąć" pętlą pierwsze 6 i ostatni 1 znak, ale nie wiem
//jak zapisać te właściwe IP do zmiennej IP która nie jest tablicą (musi byc w formie wskaźnika na char).

plik.close(); // Zamkniecie pliku
return 0;

Nie kompilowałem tego jeszcze i nie wiem czy będzie to działać. Już właściwie wszystko wiem oprócz tego zapisu z bufora (stringa) do char * IP.
P-95363
pekfos
» 2013-11-05 17:47:09
Nie będzie działać.

C/C++
plik.seekg( 4 ); // Przechodzimy do 4 linijki :D
To tak nie działa.

C/C++
plik >> IPBuffer; // Zapisujemy cala linijke do bufora
Jak wyżej.

C/C++
//tutaj mam problem bo wiem jak "obciąć" pętlą pierwsze 6 i ostatni 1 znak
Do tego nawet nie potrzeba pętli.

C/C++
//jak zapisać te właściwe IP do zmiennej IP która nie jest tablicą (musi byc w formie wskaźnika na char).
Dlaczego musi być we wskaźniku? W takiej formie przyjmuje to funkcja, do której chcesz to podać? To też tak nie działa.
P-95364
« 1 » 2
  Strona 1 z 2 Następna strona