Memo1 -> dateien einlesen
-
hi
will von einer normalen txt-datei die werte einlesen.
funktioniert mitvoid __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; char i; int anzahl = 0; ifstream f("c:\\telefonbuch.txt"); Memo1->Clear(); while(f>>i) Memo1->Lines->Add(i); if(!f.eof()) ShowMessage("Fehler beim Lesen"); f.close(); Edit1->Clear(); while(Memo1->Lines->Strings[anzahl] != ';') { ++anzahl; Edit1->Text = Edit1->Text + Memo1->Lines->Strings[anzahl -1]; } }
funktioniert eigentlich recht gut. Das Problem ist nur, Leerzeichen in der Datei werden nicht eingelesen. Wie kann ich auch die Leerzeichen anzeigen lassen?
mfg hagbard
-
void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; // Setzt 2 Variablen char i; int anzahl = 0; // Öffnet die Datei telefonbuch zum einlesen ifstream f("c:\\telefonbuch.txt"); // Löscht den Inhalt der Memo Komponennte Memo1->Clear(); while(f>>i)´ { i = f.get(); // Damit er die Leerzeichen mitmacht Memo1->Lines->Add(i); if(!f.eof()) ShowMessage("Fehler beim Lesen"); f.close(); } Edit1->Clear(); while(Memo1->Lines->Strings[anzahl] != ';') { ++anzahl; Edit1->Text = Edit1->Text + Memo1->Lines->Strings[anzahl -1]; } }
Sollte nun gehen und gewöhn dir mal an deinen Code bischen sauberer zu programmieren ansonsten blickt da keiner mehr durch und setzt ein paar Kommentare. Egal wie simpel die Funktion auch ist
-
hagbard_ schrieb:
will von einer normalen txt-datei die werte einlesen.
Memo1->Lines->LoadFromFile(""c:\\telefonbuch.txt");
-
thx ² beide
²ag3nt:
hmm, der code funkt irgendwie nicht .. er zeigt mir in der memo nur a an und gibt mir anschließend die fehlermessage aus.
wäre schön wenn es dafür eine korrektur gäbe.²jansen:
ja, kenne ich, das prob ist nur, dass ich dann nicht weiß, wie ich die restliche methode mit dieser version ausführe
ich "tüftle" mal ein bisschen
lg hagbard
-
Vielleicht klappt es ja so
PS: Sorry aber ich kenn mich auch nicht so richtig mit ifStream aus
Aber so sollte es doch gehen
void __fastcall TForm1::Button1Click(TObject *Sender) { using namespace std; // Setzt 2 Variablen char i; int anzahl = 0; // Öffnet die Datei telefonbuch zum einlesen ifstream f("c:\\telefonbuch.txt"); // Löscht den Inhalt der Memo Komponennte Memo1->Clear(); while(f>>i)´ { i = Memo1->Lines->LoadFromFile(""c:\\telefonbuch.txt"); Memo1->Lines->Add(i); if(!f.eof()) ShowMessage("Fehler beim Lesen"); f.close(); } Edit1->Clear(); while(Memo1->Lines->Strings[anzahl] != ';') { ++anzahl; Edit1->Text = Edit1->Text + Memo1->Lines->Strings[anzahl -1]; } }
-
Vielen dank für deine prompte Antwort.
Funkt aber leider noch immer nicht.
Probier den Code mal aus ...-->i = Memo1->Lines->...Kein zulässiger Typ<--
lg hagbard
-
hagbard_ schrieb:
das prob ist nur, dass ich dann nicht weiß, wie ich die restliche methode mit dieser version ausführe
Vielleicht erklärst du uns ja erst nochmal, was du eigentlich machen willst, also was am Ende rauskommen soll.
-
Die Datei sieht vom Prinzip so aus:
Vorname Nachname; Email; Telefonnummer; usw
Zwischen Vor- und Nachname ist ein Leerzeichen.
Das soll auch am Ende rauskommen.
Das Semikolon (;) ist der "Trennungspunkt". Das heißt, in Edit 1 soll dann Vor- und Nachname stehen.
lg hagbard
-
So ein ähnliches Problem hab ich auch
http://www.c-plusplus.net/forum/viewtopic.php?p=479314#479314
schau mal
Wenn wir es schaffen die Teile der Textdatei die nach Komma getrennt ist in Integer bzw. Char Variablen zu speichern denke ich mal das es einfacher ist das Problem zu lösen
-
Sucht hier mal nach CSV...
-junix
-
hagbard_ schrieb:
Die Datei sieht vom Prinzip so aus:
Vorname Nachname; Email; Telefonnummer; usw
Nur die eine Zeile oder mehrere Zeilen nach diesem Muster?
Das heißt, in Edit 1 soll dann Vor- und Nachname stehen.
Also willst du nur den Teil mit den Namen auslesen, den Rest brauchst du gar nicht?
Dann lade die Datei in eine TStringList, geh die einzelnen Strings der Liste durch und extrahiere den gewünschten Teil mit den AnsiString-Methoden wié SubString usw.
-
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString x; int anzahl = 1; Memo1->Lines->LoadFromFile("c:\\telefonbuch.txt"); x = Memo1->Text; Edit1->Clear(); while(x[anzahl] != ';'){ anzahl++; Edit1->Text = Edit1->Text + x[anzahl-1]; } }
verhilft mir jetzt dazu, dass ich den namen richtig ausgeben kann.
Die datei besteht natürlich aus mehreren zeilen, das angegebene ist nur das schema.
Ich muss auch das restliche noch ausgeben ... aber mal schauen wie ich das hinbekomme, sonst hab ich ja spitzen leute im forum
lg hagbard
-
Warum benutzt du nich AnsiString.SubString() ??
AnsiString temp; temp = Memo1->Text; Edit1->Text = temp.SubString(0,temp.Pos(";")); // Erste Zelle entnehmen temp = temp.SubString(temp.Pos(";")+1,temp.Length()); // erste Zelle aus temp löschen (wegem .Pos(";") neuen trenner finden Edit2->Text = temp.SubString(0,temp.Pos(";")); // zweite Zelle entnehmen temp = temp.SubString(temp.Pos(";")+1,temp.Length()); // zweite Zelle aus temp löschen //... u.s.w.
-
vielen dank promicha ...
gefällt mir sehr gut ... jetzt noch eine frage:
wie kann ich dann die nächste zeile erkennen?
denn möchte das ganze in einem stringgid anzeigen lassen
lg hagbard
-
Guten Nachmittag,
habe dieses Problem jetzt so gelöst:
int x = 0; int y = 1; while( y < 5){ StringGrid1->Cells[x][y] = temp.SubString(0,temp.Pos(";")-1); // Erste Zelle entnehmen temp = temp.SubString(temp.Pos(";")+1,temp.Length()); //zu naechster Zelle springen x++; StringGrid1->Cells[x][y] = temp.SubString(0,temp.Pos(";")-1); temp = temp.SubString(temp.Pos(";")+1,temp.Length()); x++; StringGrid1->Cells[x][y] = temp.SubString(0,temp.Pos(";")-1); temp = temp.SubString(temp.Pos(";")+1,temp.Length()); x++; StringGrid1->Cells[x][y] = temp.SubString(0,temp.Pos(";")-1); temp = temp.SubString(temp.Pos(";")+1,temp.Length()); x++; y++; x = 0; }
Jetzt ist nur noch folgendes Problem:
Am Anfang jeder Zeile befindet sich 2 schwarze Striche im StringGrid. Das Problem wird wohl die Zeilenschaltung sein, die dementsprechend angezeigt wird.
Hat jemand eine Idee, wie ich das lösen könnte?
mfg hagbard
-
Ok, in der letzten
temp = temp.SubString(temp.Pos(";")+3,temp.Length()); x++;
hilft ab
vielen dank für die ganzen antworten
lg hagbard