• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Praca z plikami tekstowymi C++

Object Storage Arubacloud
0 głosów
389 wizyt
pytanie zadane 4 grudnia 2016 w C i C++ przez delta_pavonis Początkujący (300 p.)

Witam

Aktualnie jestem w trakcie kursu C++ pana Mirosława i właśnie przerabiałem odcinek nt. plików tekstowych. Wszystko jest świetnie wyjaśnione i wspaniale opracowane, z tego miejsca chciałbym jednocześnie wyrazić mój podziw i uznanie dla pana Mirosława.

Bazuję na ćwiczeniu z Quizem. Wymyśliłem też własne pytania i w sumie nawet zrobiłem ich nie 5 a 20 i program świetnie działa. Niemniej wpadłem też na pomysł, by trochę zmodyfikować program i dołożyłem blok, który ma zdobyty przez użytkownika wynik zapisać w nowym pliku *txt. To też działa, ale nazwa nowo utworzonego pliku będzie zawsze taka sama i albo mogę nadpisywać ten plik, albo dopisywać do niego dane, za każdym razem gdy rozwiązuję test.

Chciałbym zrobić tak, żeby np. gdy rozwiązuje test osoba "A", to jej wynik zapisany jest w pliku pod nazwą jaką ta osoba wpisze i gdy zaraz potem rozwiązuje go osoba "B", to wynik osoby B jest zapisany w drugim pliku o nazwie wskazanej przez tą osobę B.

Wymyśliłem, że użytkownik / gracz, będzie poproszony o podanie jakiejś nazwy, albo imienia (cokolwiek) do zmiennej string.

np:

string imie;

cuot << "podaj swoje imie i nazwisko: ";    getline(cin, imie);  

    // To rozwiązanie z getline podejrzałem w kolejnym odcinku o łańcuchach.

Tą część do zapisu pliku zrobiłem tak:

fstream zapis;

zapis.open("nazwa_pliku.txt", ios::out);

No i teraz właśnie interesuje mnie to, czy w ogóle można zrobić tak, by w miejscu "nazwa_pliku" automatycznie wczytać to co użytkownik wpisze jako swoje imie i nazwisko (czyli tą zmienną string imie;)? Plus oczywiście to rozszerzenie .txt, którego w zasadzie użytkownik nie podaje.

Z góry serdecznie dziękuję za pomoc.

Mam nadzieję, że w miarę sensownie opisałem mój problem?

Pozdrawiam.

 

 

 

 

2 odpowiedzi

0 głosów
odpowiedź 4 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
std::fstream zapis{imie+".txt"};//o to chodzi?

 

komentarz 4 grudnia 2016 przez delta_pavonis Początkujący (300 p.)
Serdecznie dziękuję za odpowiedź.

Jestem początkujący więc nie potrafię jeszcze tak na pierwszy rzut oka stwierdzić czy o to mi chodziło, choć jakiś głos wewnętrzny, intuicjia podpowiada mi, że tak, to jest to. Zaraz spróbuję zapisać to w moim programie i będzie wiadomo. Ale czuję, że to zadziała.

Raz jeszcze dziękuję za pomoc.
0 głosów
odpowiedź 4 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)

Aby odczytać dane z konsoli pobierasz je do zmiennej string. Następnie piszesz sobie coś takiego:

imie += ".txt";

i masz zmienną  z ".txt".

jeśli chcesz otworzyć plik o nazwie ze zmiennej imie będziesz potrzebował c-stringu, zatem używasz odpowiedniej metody klasy string. Piszesz:

zapis.open(imie.c_str(), ios::out);

i viola wink

 

komentarz 4 grudnia 2016 przez unknown Nałogowiec (39,560 p.)

Nie potrzebuje c-string'u

http://www.cplusplus.com/reference/fstream/fstream/open/

void open (const string& filename,
           ios_base::openmode mode = ios_base::in | ios_base::out);

 

komentarz 4 grudnia 2016 przez unknown Nałogowiec (39,560 p.)
Po co dajesz ten link?
1
komentarz 4 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)
obsługa string została dodana dopiero w c++11. C-string jest bardziej uniwersalny.
komentarz 4 grudnia 2016 przez unknown Nałogowiec (39,560 p.)

I co z tego, że została dodana w C++11? Mamy rok 2016. Obecny standard to C++14(a C++17 już niebawem). Używanie jakiegokolwiek innego starszego standardu(lub kompilatora bez wsparcia najnowszych standardów) to głupota i utrudnianie sobie życia.

C-string jest bardziej uniwersalny.

Tak, w C

komentarz 4 grudnia 2016 przez delta_pavonis Początkujący (300 p.)
Serdecznie dziękuję.

Tak jak wyżej napisałem dla użytkownika unknown Pasjonat, jestem początkujący i jeszcze trochę się gubię, ale myślę że tak profesjonalna i błyskawiczna pomoc, na pewno zadziała. Zabieram się do przetestowania tych rozwiązań.

Raz jeszcze dziękuję.

Pozdrawiam.

Żeby oczywiście nie było wątpliwości, podam przykład dotyczący tego o co mi chodzi.

Wyobraźmy sobie sytuację np. w szkole. Podchodzi do komputera pierwszy uczeń, wpisuje swoje imię i nazwisko, rozwiązuje test i klika enter, a jego wynik zapisuje się w pliku o nazwie = jego imię i nazwisko. Następnie podchodzi drugi uczeń i sytuacja się powtarza. Czyli dla każdego ucznia jest stworzony jego imienny plik z jego wynikiem.
komentarz 4 grudnia 2016 przez delta_pavonis Początkujący (300 p.)
To rozwiązanie: zapis.open(imie.c_str(), ios::out);  u mnie zadziałało, tyle że otwierając plik muszę wybrać program z listy, no i np. notatnik otwiera bez problemu. Generalnie o to mi chodziło, jest super. Bardzo dziękuję. Mógłbym powiedzieć, że też chętnie posłużę pomocą, choć na razie to widzę, że jeszcze sporo nauki przede mną. Mogę co najwyżej pomóc np. w kwestiach jakichś problemów matematycznych. Oczywiście nie jestem żadnym geniuszem matematycznym, po prostu ten przedmiot w szkole zawsze wychodził mi lepiej w porównaniu z innymi :D.

Dziękuję wszystkim osobom, które tak szybko i ochoczo pospieszyły mi z pomocą.

Serdecznie pozdrawiam

Podobne pytania

0 głosów
0 odpowiedzi 95 wizyt
pytanie zadane 24 czerwca 2022 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
2 odpowiedzi 145 wizyt
pytanie zadane 4 kwietnia 2017 w C i C++ przez trebuH Nowicjusz (170 p.)
+1 głos
2 odpowiedzi 230 wizyt
pytanie zadane 27 stycznia 2016 w C i C++ przez Kimi Bywalec (2,050 p.)

92,551 zapytań

141,399 odpowiedzi

319,531 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...