Datei Einlesen in ein Memofeld
-
Hallo und Guten Morgen
Ich habe ein Problem mit dem Einlesen von einer Datei in ein Memofeld.
// Soweit habe ich es hinbekommen und es läuft auch Memo1->Lines->LoadFromFile("test.dat"); // Hier liegt das ProblemDas Problem liegt darin das ich die Datei fest angeben tuhe, aber unser Projekt soll ja auch andere Dateien einlesen. z.b. test123.dat.
Ich dachte mir villeicht das ich überprüfe ob die endung .dat vorhanden ist und dann die datei laden tuhe die eine Endung .dat besitzt.
Mit Opendialog wollte ich nicht arbeiten weiß auch nicht so recht ob dies
so realisierbar wäre.Wäre für eine Lösung dankbar
MFG
-
äh, woher 'weiß' denn Dein Programm, welche Datei es einlesen soll, wenn es mehrere gibt?
Schau Dir mal TSearchRec an.
-
Es liegt ja im Ordner immer nur eine Datei .dat in dem Ordner nicht mehrere nur der Anfang der Datei test.dat oder test123.dat der ändert sich.
aber wenn ich es fest vorgebe will das Programm ja immer die test.dat lesen.
Die Aufgabe in der Schule was wir haben lautet:
Laden Sie in eine Memofeld eine Datei test.dat. Das Programm soll ausserdem Dateien lesen mit der Endung .dat , wobei die Datei nicht Test.dat heissen soll
sondern test123.dat, test1234.dat. Löschen Sie die Datei test.dat aus dem ordner und Tauschen sie sie mit der Datei test123.dat oder test.1234.dat aus ohne Änderung an dem Haupsächlichen Programm vorzunehmen.
-
So richtig versteh ich das noch nich, aber vielleicht sollte er sich mal ExtractFilePath() anschauen??
-
TOpenDialog verwenden, Hilfe lesen, Beispiel unter Methode Execute anschauen, fertig...
-
Nein, TSearchRec sollte schon genügen...
-
Also ich komm damit nich zurecht:
er findet nix...
TSearchRec sr; AnsiString Path = Edit1->Text; FindFirst(Path,faAnyFile,sr); Label1->Caption=sr.Name;
-
AnsiString SearchDir = "c:\\verzeichnisname\\"; // \\ am Ende ist wichtig! AnsiString SearchFiles = "*.dat"; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { // do // { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat // } while (FindNext(sr) == 0); } FindClose(sr);Die auskommentieren Zeilen zeigen, wie das Ganze in einer Schleife funktionieren würde, die alle .dat-Dateien durchiteriert.
Natürlich kann man dann keinen AnsiString (DatDatei) mehr verwenden, sondern muss z.B. eine TStringList verwenden, um die Dateinamen zwischenzuspeichern.
-
ok, und wie kann ich pfad per Edit eingeben, meins oben hat ja nich funktioniert!
Wie kann ich anzahl der Files in dem ordner ermitteln, damit ich dann serachnext machen kann??
-
hm, soll ich gleich die ganze Hausaufgabe für Dich machen?

Ich finde ein bißchen eigenen Hirnschmalz kannst Du auch investieren. Eine Zählvariable solltest Du schon selbst hinbekommen. Und wie man einem AnsiString den Text eines Edits zuweist auch. Um sicher zu stellen, dass am Ende ein \\ enthalten ist: IncludeTrailingBackslash(...)
-
Och Joe!
ICh schaffs net:
void __fastcall TForm1::Button1Click(TObject *Sender) { TSearchRec sr; AnsiString Path = IncludeTrailingBackslash(Edit1->Text); FindFirst(Path,faAnyFile,sr); Memo1->Lines->Add(sr.Name); FindNext(sr); Memo1->Lines->Add(sr.Name); }geht net, und wie ich anzahl an *.txt Dateien in dem Ordner finden kann weiß ich auch net!!!!! Hilf mir bitte!
-
Was tippst Du denn im Editfeld ein?
Schau Dir bitte nochmal mein Beispiel in Ruhe an.
Grüße Joe_M.
-
ich tippe c:\, c:\, c:\., c:\*.*!
Nix geht!
-
Wie wärs damit?
void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString SearchDir = Edit1->Text; // \\ am Ende ist wichtig! AnsiString SearchFiles = Edit2->Text; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; Memo1->Clear(); if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { do { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat Memo1->Lines->Add(sr.Name); } while (FindNext(sr) == 0); } FindClose(sr); }
-
Gast2 schrieb:
ich tippe c:\, c:\, c:\., c:\*.*
nur das erste dürfte gehen, 3. und 4. sind keine Pfadangaben, 2. wird dann zu C:\\\
es müßte sogar C: reichen
und schau dir das Beispiel von Joe NOCHMAL genau an, speziell die Zeile mit FindFirst
-
Ah danke @5erial und Joe, es geht doch...sorry!
Nur die Sache mit dem erkennen, wieviele Dateien meiner Auswahl in dem Ordner sind weiß ich noch nicht, wie geht das?
-
hallo?

-
Hallo
steht in
Memo1->Lines->Countbis bald
akari
-
nein ich möchte das vorher wissen, wieviel dateien in einem ordner sind, bevor ich es ins memo lesen!
-
Hallo
Dann mußt du die Dateinamen erstmal zwischenspeichern :
void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString SearchDir = Edit1->Text; // \\ am Ende ist wichtig! AnsiString SearchFiles = Edit2->Text; TSearchRec sr; int iAttributes = 0; AnsiString DatDatei; TStringList *Buffer = new TStringList(); // Zwischenspeicher für Dateinamen Memo1->Clear(); if (FindFirst(SearchDir + SearchFiles, iAttributes, sr) == 0) { do { int curAttrib = FileGetAttr(SearchDir + sr.Name); if (curAttrib & faDirectory) continue; // Unterverzeichnisse ignorieren, auch wenn sie mit .dat enden DatDatei = sr.Name; // enthält die erste gefundene Datei mit der Endung .dat Buffer->Add(sr.Name); } while (FindNext(sr) == 0); } FindClose(sr); // Jetzt kannst du aus Buffer->Count die Anzahl an Dateien lesen Memo1->Lines->Assign(Buffer); // Schreibt die Namen in das Memo delete Buffer; }bis bald
akari