[C++/CLI] Odczytywanie z pliku danych

Posiadam plik file.txt z zapisanymi danymi w formacie (koniec rekordu oznaczony znakami ||):

Imię;Nazwisko;Numer telefonu;Data ostatniego zabiegu;Zabiegi||

Program ma odnaleźć odpowiednie imię i nazwisko w pliku TXT, po czym informacje z pola “Data ostatniego zabiegu” i “Zabiegi” mają zostać wpisane do pliku TXT w odpowiednim miejscu (nie modyfikując imienia i nazwiska) w rekordzie.

textBox1 zawiera Imię, textBox2 zawiera Nazwisko, textBox3 zawiera Zabiegi, dateTimePicker1 zawiera Datę ostatniego zabiegu.

Prosiłbym o napisanie kodu, bo sam rady nie dam.

C++/CLI to nie to samo co C++… :frowning:

Kod wykonujący się przy kliknięciu przycisku:

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

			System::String^ str;

			System::String^ imie;

			char znak;

			//str=textBox1->Text;

			int i=0;

			System::String^ str2;

			StreamReader^ din = File::OpenText("file.txt");

			do {

				str=din->ReadLine();

				//szukam imie i nazwisko

					          while (znak!=';') {

                              znak=str[i];

                              imie=imie+znak;

                              i=i+1;

                             }

				} while ((str = din->ReadLine()) != nullptr);

			textBox1->Text=imie; //tymczasowo do odczytu zmiennej imie


		 }

Zmienna imie pokazuje wartości liczbowe (?), już sam nie wiem o co chodzi…

Proszę o pomoc.

http://msdn.microsoft.com/en-us/library/y52yxde8.aspx

Dla mnie tworzenie jakiejkolwiek bazy w pliku *.txt mija się z celem. Lepszym pomysłem byłoby połączenie tego z prawdziwą bazą danych z użyciem przykładowo MS SQL Server. Zmieniając temat mnie ostatnio przekonali, że połączenie z .NET ma lepsze zastosowanie w C# :slight_smile:

do pobrania imienia i nazwiska bardziej przydatny będzie ten link:

http://msdn.microsoft.com/en-us/library/e3awe53k.aspx

wtedy w podwiedich miejscach w tablicy będą szukane dane (0 - imię i 1- nazwisko )

SQL Server do przechowywania dwóch atrybutów? Nonsens.

@somekind czyli uważasz, że trzymanie tego typu danych w pliku txt jest najlepszym rozwiązaniem, interesujące…

ja ze swojej strony polecił bym format xml do przechowywania tego typu danych. Dzięki serializacji i deserializacji w łatwy sposób można uzyskać dostęp do danych i możliwości modyfikacji, manipulacji przez aplikację.

Bardziej interesujące jest to, gdzieś Ty to wyczytał, bo ja nic takiego nie napisałem. Cytat poproszę.

  • fakt wyśmianie propozycji innej niż plik txt

Komuś przydałaby się powtórka z podstaw logiki.

Kłócicie się panowie o pietruszkę. Uważam, że spokojnie można to było zacząć od mojej propozycji lub innej tym bardziej, że tworząc jakąkolwiek bazę w połączeniu z programem to chyba nie rozpoczynaliście od relacji n - n?

To, że ciężko u ciebie z czytaniem ze zrozumieniem oraz z myśleniem logicznym, to jeszcze nie znaczy, że możesz mi cokolwiek imputować.

Nie sądzę, aby to pomogło. To tak, jakby chcieć nauczyć kozę latać.

Przede wszystkim, to autor wątku pyta o plik txt, który już posiada, więc pisanie o SQL czy XML jest średnio trafne. :slight_smile:

Co do egzystencjalnych problemów niektórych użytkowników - płaski plik, taki jak CSV nie jest wcale złym sposobem na przechowywanie płaskiej, nierelacyjnej struktury dla małych ilości danych. Jego zaletą w porównaniu z XML jest chociażby to, że nie potrzebuje tylu metadanych.

PolishNetwork , po co w ogóle używasz C++/CLI?

A jeśli już używasz, to korzystaj z metod i klas .NET:

// wczytanie wierszy pliku

array^ wiersze = File::ReadAllLines("C:\\file.txt");			

// tego będziemy szukać:

String^ imieNazwisko = this->txtImie->Text + ";" + this->txtNazwisko->Text;

// wyszukanie wiersza

for (int i = 0; i < wiersze->Length; i++) {

	// jeśli znajdziemy, to zastępujemy i przerywamy

	if (wiersze[i]->StartsWith(imieNazwisko)) {

		wiersze[i] = imieNazwisko + ";" + this->txtZabieg->Text + ";" + this->dtpData->Value.ToShortDateString() + "||";

		break;

	}

}

// zapis

File::WriteAllLines("C:\\file.txt", wiersze);

Bardzo Wam dziękuję, a w szczególności za ostatni post, gdyż wiem już w jaki sposób mogę to napisać. Spróbuję to zaimplementować w programie i ogłoszę wyniki naszej wspólnej pracy. :wink:

@somekind

Znam jedynie C++, jestem w trakcie nauki i jeszcze nie uczyłem się wykorzystywania chociażby WinAPI, dlatego zaledwie tyle udało mi się uzyskać.

Ogólnie potrzebuję zrobić program do zarządzania salonem - dodawanie klienta z nr tel, dodawanie do niego zabiegów wraz z datami, wyszukiwanie klientów i przeglądanie ich zabiegów.

PLIKI PROJEKTU VC++ 2010

Prosiłbym o ew. poprawki, jutro pod wieczór pokażę swoje wyniki.

Ale Ty nie piszesz w C++ tylko w C++/CLI i nie używasz WinAPI tylko .NET. To są różne języki i różne biblioteki, a robienie tego, co Ty robisz w C++/CLI nie ma najmniejszego sensu. W tym przypadku lepszy byłby C#.

No cóż… Program ten zrobiłem o wiele szybciej w C#.

Dziękuję za wszelkie odpowiedzi.

Pozdrawiam.