CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Odczytywanie danych z pliku tekstowego

Odczytywanie danych z pliku tekstowego

dział ogólny

Odczytywanie danych z pliku tekstowego

Nowy postprzez Marek_M » niedziela, 22 lutego 2015, 20:13

Witam wszystkich

Chciałbym prosić o wskazówkę, jak odczytać dane z pliku tekstowego linia po linii i każdą kolejną linię wyświetlić na jakimś komponencie edycyjnym (może być Memo, Label lub Edit).

Dokładnie chodzi mi o to, żeby wciśnięcie przycisku powodowało wyświetlenie 1 linii tekstu z pliku, drugie wciśnięcie wyczyszczenie pola edycyjnego, trzecie wciśnięcie - wczytanie 2 linii tekstu, 4 - wyczyszczenie pola itd.

Plik tekstowy zawiera kolejne pytania do mini quizu.

Próbowałem zaadaptować następujący kod ze strony Administratora:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 char Buf[255];
 ifstream infile;
 infile.open("Test.txt");

 for(int i = 0; i < 10; i++)
 {
   infile.getline(Buf, 255);
   Memo1->Lines->Add((AnsiString)Buf);
 }

 infile.close();
}


Ale niestety wyświetlały mi się ciurkiem wszystkie pytania.

Pozdrawiam
Marek

PS
Proszę o wyrozumiałość, gdyż stawiam pierwsze kroki w builderze i traktuję go raczej czysto użytkowo.
Avatar użytkownika
Marek_M
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): niedziela, 22 lutego 2015, 19:57
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 6
SKYPE: brak
Gadu Gadu: 0
    Windows VistaFirefox

Re: Odczytywanie danych z pliku tekstowego

Nowy postprzez polymorphism » poniedziałek, 23 lutego 2015, 11:54

Zamiast metody istream::getline użyj funkcji getline.
KOD cpp:     UKRYJ  
string s;
...

getline(infile, s);
Memo1->Lines->Add( s.c_str() );
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Marek_M
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Odczytywanie danych z pliku tekstowego

Nowy postprzez Mironas » poniedziałek, 23 lutego 2015, 12:08

Proponuję następujące rozwiązanie:

Na formie umieszczasz Memo1 i Button1.

W pliku Unit1.h w sekcji "private"):
KOD cpp:     UKRYJ  
private:
  TStrings* Pytania;  // lista wszystkich pytan
  int nrp;  // nr aktualnego pytania, numeracja od 0 (zero)


Przy starcie programu (w zdarzeniu OnCreate lub OnShow):

KOD cpp:     UKRYJ  
  Pytania = new TStringList();
  Pytania->LoadFromFile("C:\\Pytania.txt");
  nrp = 0;
  Memo1->Clear();  // wyczyść zawartość memo


Przy zamknięciu programu (w zdarzeniu OnDestroy lub OnClose)

KOD cpp:     UKRYJ  
   delete Pytania;


Klikasz podwójnie na Button1 i w utworzonym zdarzeniu Button1OnClick wpisujesz kod:

KOD cpp:     UKRYJ  
  if ( Memo1->Lines->Text=="" )  // Jeżeli Memo1 jest puste
  {
    Memo1->Lines->Text = Pytania->Strings[npr];  // wczytaj do memo pytanie nr nrp
    nrp++;  // zwiększ nr pytania o 1
  }
  else   // w przeciwnym przypadku, gdy Memo1 ma wpisaną treść
    Memo1->Clear();  // wyczyść memo
 


Powyższy kod trzeba by jeszcze rozbudować o sprawdzanie czy nie wyświetlono już ostatniego pytania. Ilość wierszy w Pytania odczytasz tak:

KOD cpp:     UKRYJ  
  int ilosc = Pytania->Count;


Pamiętaj, że numeracja wierszy (Pytania->Strings[npr]) zaczyna się od 0 (zero).

Przykłady pisałem z palca, więc mogą być jakieś literówki.

Za ten post autor Mironas otrzymał podziękowanie od:
Marek_M
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Odczytywanie danych z pliku tekstowego

Nowy postprzez Marek_M » poniedziałek, 23 lutego 2015, 14:18

Wielkie podziękowania dla Kolegów

Szczególnie dla Kolegi Mironasa, który całą rzecz wyłożył mi łopatologicznie. Wklepałem wszystko tak, jak kazał i... śmiga, aż miło.

Koledze polymorphizm również bardzo dziękuję za odpowiedź, niestety na moim etapie zaawansowania nie mogłem z niej skorzystać :D .

Pozdrawiam
Marek_M

PS Mam nadzieję, że w razie kłopotów (a na pewno takowe będą) mogę liczyć na kolejne wskazówki Kolegów.
Avatar użytkownika
Marek_M
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): niedziela, 22 lutego 2015, 19:57
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Windows Vista
Kompilator: C++ Builder 6
SKYPE: brak
Gadu Gadu: 0
    Windows VistaFirefox

Re: Odczytywanie danych z pliku tekstowego

Nowy postprzez Cyfrowy Baron » poniedziałek, 23 lutego 2015, 20:35

KOD cpp:     UKRYJ  
 if ( !Memo1->Lines->Text.IsEmpty() && nrp < Pytania->Items-Count)  // Jeżeli Memo1 jest puste a nrp nie osiągnęło końca
  {
    Memo1->Lines->Text = Pytania->Strings[npr];  // wczytaj do memo pytanie nr nrp
    nrp++;  // zwiększ nr pytania o 1
  }
  else
  {   // w przeciwnym przypadku, gdy Memo1 ma wpisaną treść
    Memo1->Clear();  // wyczyść memo
  }

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Marek_M
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 64 gości

cron