[C++] Zapisywanie w strukturach


(Ovitz Pl) #1

Witam Szanownych użytkowników.

Mam plik .txt w którym znajduje się:

1.3 2.0 0.04

4.0 2.5 0.06

3.0 1.5 0.03

Niestety nie za bardzo opanowane mam operacja na plikach. A minowicie chodzi mi o to w jaki sposób mogę otworzyć ten plik i wyświetlić jego zawartość? Wiem że strukturą tu jakoś moge pomóc, niestety za bardzo nie wiem jak.

Ps. Jestem laikiem wprogramowaniu więc proszę o jak najprostszy język :stuck_out_tongue:

Jak coś to kompiluje w Visual Studio 2005.

Albo jeszcze inaczej, jak umieścić dane z pliku w strukturze?

A i jeszcze jedno, w jaki sposób można policzyć ilość linijek w tym pliku?

Podrawiam.


([alex]) #2
#include

(Fiołek) #3

A jeśli nie chcesz parsować tego pliku(bo to co chcesz zrobić tak się właśnie nazywa) to musisz wczytać albo cały plik do bufora, albo wczytywać kawałkami i we wczytanym buforze zliczać wystąpienie znaku nowej linii(\n, ASCII: 10).


([alex]) #4

Od razu nasuwa się pytanie: - Kim jesteś i co zrobiłeś z Fiołkiem? Fiołek , zawsze wyróżniał się dokładnością w wypowiedziach (przynajmniej się starał). :stuck_out_tongue:

Odradzam tą metodę, bo z dużym prawdopodobieństwem nie dostaniesz poprawnej odpowiedzi, wszystko będzie zależało od tego czy po ostatnim wierszu jest , czy jest kilka 'ów, czy też brak 'a. Nie już o przekłamaniach spowodowanych pustymi wierszami w środku pliku.

Ovitz , popraw może tytuł tematu, bo brzmi jak "Wlatcy móch".


(Fiołek) #5

A czy pusta linia nie jest linią? Autor wątku nie pytał o liczenie wierszy z wykluczeniem wierszy pustych :wink: Tak samo jest ze znakiem nowej linii na końcu ostatniej linii. Jeśli jest - jest też nowa linia. Jeśli nie ma - nie ma nowej linii ZA ostatnią zapisaną linią. Jeśli jest kilka to jest też kilka pustych linii. Jeśli autor nie chce liczyć tych pustych linii to pozostaje sprawdzać dwa znaki, nie jeden.


(Somekindsoftware) #6

Może nie powinienem komentować, bo sam (czego teraz bardzo żałuję) dałem się niedawno wciągnąć w tego typu dyskusję, ale...

Ostatnimi czasy na forum daje się zauważyć, że rozwiązywanie każdego, nawet najprostszego problemu jest sprowadzane do komplikowania go w niepotrzebnym stopniu, szukania dziury w całym, dodatkowych problemów tam, gdzie ich nie ma i w zasadzie ciągłego offtopicu, a na dodatek podawania gotowców - o które raczej nikt nie prosi, a nawet jeśli by to czynił, to nie powinien. Zaś akademickie dyskusje, które się rodzą w celu zaszpanowania swoją wiedzą raczej nie pomagają autorom wątków, mogą jedynie utrudnić i zagmatwać.


([alex]) #7

somekind , na pewno wyżej przedstawiony kawałek kodu nie będzie dokładnie pasować autorowi tematu. Dla mnie nie wiedzieć czemu, najłatwiejsze zawsze było uczenie się na przykładach. W związku z powyższym uważam że jak umieścisz swój przykład rozwiązujący powyższy problem, a potem ewentualnie podyskutujemy co do optymalności, elastyczności, czytelności itp, ale w tonie normalnym , to wszystkim wyjdzie to na dobre. :stuck_out_tongue:


(Ovitz Pl) #8

Tak, to dobry pomysł z tym przykładowym programem do liczenie linijek w tym tekscie. Chodzi mi oczywiscie o policzenie tylko tych linijek w których znajduje się te cyferki, można o taki przykładzik prosić?


([alex]) #9

Obejrzy sobie kod który zaproponowałem:

   for(int i=0;i<V.size();++i) // V.size() = ilość linijek z danymi.  [/code]

Część z tego kodu można wywalić o ile potrzebujesz jedynie ilości wierszy z danymi:

[code=php]#include 


(Ovitz Pl) #10

Właśnie nie bardzo umiem korzystać z tego #include

U mnie program teraz wygląda tak:

#include "head.h"



struct magazyn 

{ 

    float sz; 

    float dl;

    float gr;

}; 


magazyn licz[3]; 

int x = 0; 



int main()

{

	 ifstream pliczek("dane.txt" , ios::in); 

    while(! pliczek.eof()) 

    { 

        pliczek >> licz[x].sz; 

        pliczek >> licz[x].dl;

		pliczek >> licz[x].gr;

        x++; 

    } 

    //-------------------------------- 

    for(int y = 0; y+1 
    { 

        cout << "Plyta nr." << 1+y << endl; 

		cout << "Szerokosc: " << licz[y].sz;

        cout << " Dlugosc; " << licz[y].dl;

		cout << " Grubosc; " << licz[y].gr<
    } 


		cout<
	 system("PAUSE"); 

    return EXIT_SUCCESS; 

}

Możesz mi powiedzieć do czego służy ta funkcja fin?


([alex]) #11
#include

(Ovitz Pl) #12

Program działa genialnie, dziewie się że chciało Ci się go pisać :smiley: Dziękuje za poświęcony czas.

Dziękuje pięknie :* W razie jakikolwiek pytań odezwe się :wink: