Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrere Dateien in StringList Laden und wieder speichern (https://www.delphipraxis.net/144684-mehrere-dateien-stringlist-laden-und-wieder-speichern.html)

AnyKey 14. Dez 2009 13:16


Mehrere Dateien in StringList Laden und wieder speichern
 
Hi,

ich habe ein kleines Problem, ich will mehrere Dateien in eine StringList laden, sie aber auch wieder in diese Dateien speichern können. Also wenn ich z.B. die Dateien blubb.txt, bla.txt und test.txt in die Stringlist lade sollen beim schließen des Programms diese Dateien auch so wieder gespeichert werden, samt änderungen. Dei StringList wird in ein Richedit übergeben und beim speichern wird das Richedit wieder in die Stringlist übertragen und diese dann gespeichert. Meine Idee wäre gewesen bevor eine neue Datei anfängt den Dateipfad mit Dateiname der jeweiligen Datei vor den Anfang der Datei zu schreiben, diese Zeile dann aber beim Anzeigen im Richedit nicht zu berücksichtigen. DateiName und Pfad benötige ich außerdem für die Caption des fensters und eine kleine Anzeige.

Wenn jemand eine Idee hätte wie man das lösen/besser lösen kann bin ich für jeden Vorschlag offen.

Edit: Ok für das Laden hab ich eine Idee, aber hat vielleicht jemand einen Vorschlag wie ich das ganze dann wieder speichere? sch die Dateien einfach in einem Array merken oder so bringt ja nichts.

Gruß
AnyKey

p80286 14. Dez 2009 14:38

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hallo Anykey,

dein Ansinnen finde ich etwas gewöhnungsbedürftig. Wenn ich es richtig verstnden habe, dann hast Du in einem RichEdit den Inhalt von drei (Text)-Dateien.
Das RchEdit impliziert, das der eingelesene Text frei editierbar ist, somit scheint es mir nicht so sinnvoll an jede Textzeile die Herkunft "anzupappen" (.Objects)

Mir würde da eher so etwas vorschweben:
Delphi-Quellcode:
record
  ZeileausDatei1:string;
  ZeileausDatei2:string;
  ZeileausDatei3:string;
end;
Und dann ein "Editfenster" für jeden String, ähnlich wie Name, Vorname, Wohnort.

Bestimmt nicht optimal, aber wenn wir Deine Dateninhalte nicht kennen, dann ist es schwierig etwas vernünftiges zu sagen.

Gruß
K-H

AnyKey 14. Dez 2009 14:52

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hi, vielleicht habe ich mich etwas missverständlich ausgedrückt :)

Also ich will mehrere Dateien in eine StringList laden, die ich danach in einem RichEdit anzeige, aber auch noch für eine Andere Funktion benutze. Wenn nun Veränderungen gemacht wurden, will ich diese ja auch wieder speichern, also die Frage wie speichere ich diese Dateien jetzt wieder in ihre jeweilige Ursprungsdatei und nicht in eine neue Datei. Irgendwie muss ich mir ja merken welcher Inhalt der nun im RichEdit steht bzw. sich in der StringList befindet zu welcher Datei gehört, um diesen auch wieder dorthin zu speichern.

Gruß
AnyKey

Sharky 14. Dez 2009 14:54

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Zitat:

Zitat von AnyKey
... Also ich will mehrere Dateien in eine StringList laden, ...

Möchtest Du die Dateien in eine StringList laden oder die Dateinamen?

AnyKey 14. Dez 2009 15:02

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hi,

ich will die Dateien in die Stringlist laden. Meine Idee war nur vor die Jeweilige Datei (also in eine Zeile bevor die Datei beginnt) den Dateinamen zu schreiben und das dann anhand dessen zu Speichern und die Anzeige und die Caption zu schalten. Aber es gibt ja bestimmt eine bessere lösung :)

Gruß
AnyKey

Uwe Raabe 14. Dez 2009 15:07

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Verstehe ich das richtig: du willst mehrere Dateien in ein RichEdit laden, aber jeweils nur eine zu einem Zeitpunkt und die Änderungen sollen wieder in diese Datei geschrieben werden?

patti 14. Dez 2009 15:08

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Ehrlich gesagt verstehe ich den Sinn dahinter noch nicht ganz. Evtl. könntest du aber auch für jede Datei ein eigenes Memo (oder Richedit) dynamisch anlegen und so positionieren, dass die einzelnen Texte direkt untereinander stehen. Allerdings kannst du dann nicht zwei Dateien "gleichzeitig" bearbeiten, also beispielsweise nicht das Ende der einen und den Anfang der nächsten Datei markieren/bearbeiten,...

Vielleicht solltest du nochmal genau erklären, wie du dir das genau vorstellts und vielleicht auch warum ;-) Vielleicht gibt es ja eine bessere Lösung.

MFG

Edit: Wenn du das so meinst, wie es Uwe Raabe beschrieben hat, dann kannst du dir natürlich die mehreren Memos sparen...

AnyKey 14. Dez 2009 15:12

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Nein das ist falsch, ok ok vergesst das RichEdit :)

Ich will mehrere Dateien in eine Stringlist laden, wie das geht habe ich denke ich auch rausgefunden:

Delphi-Quellcode:
for i := 0 to OpenDialog.Files.Count-1 do
begin
  Child.ausgabeList.LoadFromFile(OpenDialog.Files[i]);
end;
müsste denke ich so funktionieren. Das Problem das sich aber eher stellt ist das Speichern dieser Stringliste, der Inhalt kommt ja aus verschiedenen Dateien und er soll auch wieder in diese Dateien zurück und nicht etwa in einer neuen Datei gespeichert werden.

Gruß und sorry wenn ich für Verwirrung sorge :) nehmts mir nich übel ;)
AnyKey

Edit: achso und die Dateien sollen alle zur selben zeit ins Richedit geladen werden und auch bearbeitet werden können.

Tyrael Y. 14. Dez 2009 15:12

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Ich versteh gar nicht wie du bei einer neuen Eingabe im Richedit feststellen willst, in welche Datei es kommen soll.

So wie ich dich verstehe hast du 3 Dateien in denen zeilenweise Texte stehen.
Alle Dateiinhalte von den Dateien möchtest du in einen Richedit laden.
Im Richedit werden Veränderungen vorgenommen.
Danach möchtest du den gesamten Inhalt des Richedits in diese drei urprünglichen Dateien wieder speichern.

Alles richtig verstanden?

Edit:
So wie du es vorhast kann es nicht gehen.
Du musst einen Bezug des Textes zur jeweiligen Datei behalten.

Text im Richedit bzw. in der Stringliste
Zitat:

Text aus Datei 1
Text aus Datei 1
Text aus Datei 1
Text aus Datei 2
Text aus Datei 2
Neuer Eintrag 1
Text aus Datei 3
Text aus Datei 3
Text aus Datei 3
Text aus Datei 3
Neuer Eintrag 2
Das ist schon logisch auf diese Weise nicht möglich, da jeglicher Bezug zu den ursprünglichen Dateien weg ist.

AnyKey 14. Dez 2009 15:20

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
@Tyrael Y. genau so solls mal funktionieren. Merke allerdings gerade selber das, dass nich grad unkompliziert ist :) um dem ganzen aber den schrecken zu nehmen, vielleicht kann ich es auch so machen dass man überhaupt keine Datensätze ändern kann, wenn ich recht überlege sollen diese Dateien mit denen ich das vorhabe garnicht verändert werden.... :gruebel: ok ich mach mir noch mal gedanken und meld mich dann noch mal.

Gruß
AnyKey

Tyrael Y. 14. Dez 2009 15:24

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Wenn sie nicht verändert werden können, dann ist es einfach.

Merke dir für jede Datei wieviele Zeilen es waren.
Erzeuge drei Stringlisten.
Lese in jede der drei Stringlisten so viele Zeilen aus dem Richedit ein, wie du dir gemerkt hast.
Speichere jede Stringliste mit dem Pfad der dazugehörigen Datei.

Fertig.

Uwe Raabe 14. Dez 2009 15:40

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Zitat:

Zitat von AnyKey
Ich will mehrere Dateien in eine Stringlist laden, wie das geht habe ich denke ich auch rausgefunden:

Delphi-Quellcode:
for i := 0 to OpenDialog.Files.Count-1 do
begin
  Child.ausgabeList.LoadFromFile(OpenDialog.Files[i]);
end;
müsste denke ich so funktionieren.

Glaube ich nicht - so hast du wahrscheinlich nur die letzte Datei in der Stringlist.

p80286 14. Dez 2009 16:50

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hallo AnyKey,

um welche Daten handelt es sich? Adressen? wenn ja, dann mußt Du uns nicht sagen ob das die Adressen aller YMCA Niederlassungen weltweit sind sondern nur, daß es sich um Adressdaten handelt.
Zitat:

Zitat von Tyrael Y.
Wenn sie nicht verändert werden können, dann ist es einfach.
...

Aber warum dann dieses RichEdit ?
Dann reicht auch das kastrierte Readonly-Memo was vor kurzem hier durchgeisterte.

[OT] warum gibt es eigentlich kein TBrowse ?? [/OT]

Gruß
K-H

AnyKey 15. Dez 2009 08:03

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hi,

@Tyrael Y.: Das mit den 3 Stringlisten geht nicht, wegen dem weiterblättern, was ich ein stück weiter unten erkläre. Ansonsten wär das wohl die Lösung gewesen.

@Uwe Raabe: Naja werde ich sehen obs funktioniert, ich denke es müsste so funktionieren, aber wenn du einen besseren Vorschlag hast bin ich auch nicht abgeneigt :)

@K-H: Es handelt sich nicht um Adressdaten, sondern um Logfiles. Also, ich versuchs mal zu erklären, die Datei/die Dateien werden in eine Stringlist geladen. In jedem Logfiles befinden sich bestimmt 1000 einträge, mal mehr mal weniger, aber das tut ja nicht viel zur sache, jetzt werden 50 Datensätze zur Anzeige in das RichEdit geladen, um sie sich anzusehen und gegebenenfalls zu ändern. Es gibt eine Funktion weiterblättern, um sich die nächsten 50 Datensätze anzeigen zu lassen. Außerdem gibt es eine Suchfunktion, die die Stringlist nach einem Suchwort durchsucht und die Datensätze mit übereinstimmung in eienm neuen Childfenster in dessen Richedit anzeigt. Warum ich keine andere Komponente nehme als das RichEdit begründet sich damit, dass die "Aufgabenstellung" bzw. der Auftrag so lautet.

Edit: Ok das mit dem Speichern hat sich jetzt erledigt, die Logfiles sollen nicht verändert werden können. Ist ja eigentlich auch Logisch, war nur bis jetzt irgendwie anders...

Danke für eure Hilfe!! ;)

Gruß
AnyKey

AnyKey 15. Dez 2009 14:45

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hi,

so wie es aussieht funktioniert das wirklich nicht so mit dem Laden, hat da jemand eine Idee wie das funktionieren könnte?

Gruß
AnyKey

shmia 15. Dez 2009 15:03

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Das Problem ist, dass man dir alles aus der Nase ziehen muss.
Du willst also einen LogViewer; also ein Programm zum Betrachten von Logdateien schreiben, oder????
Dann wäre eine MDI-Anwendung sinnvoll.
Jede Logdatei erhält ein eigenes Fenster.
Jedes Fenster enthält Möglichkeiten zum Suchen oder auch zum Speichern von markierten Abschnitten in einer neuen Datei.
Falls alle Logdateien die gleiche Struktur haben, könnte man auch eine Funktion einbauen, damit alle aktiven Fenster die Anzeige bei einem best. Datum+Uhrzeit beginnen...

Uwe Raabe 15. Dez 2009 15:07

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Zitat:

Zitat von AnyKey
so wie es aussieht funktioniert das wirklich nicht so mit dem Laden, hat da jemand eine Idee wie das funktionieren könnte?

Kann auch nicht funktionieren, da LoadFromFile die StringList erst mal leer macht.

Alternative: Lade jede Datei in eine eigene Stringlist und setzte diese dann mit AddStrings zusammen.

AnyKey 17. Dez 2009 08:05

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
@shmia: man muss mir nicht alles aus der Nase ziehen, ich habs jetzt schon ein paar mal erklärt, vielleicht erklär ichs ja nur falsch...

Es gibt eine MDI Anwendung! Nur denke ich nicht dass es notwendig ist das ganze Projekt zu kennen wenn es mir nur darum geht mehrere Dateien in eine Stringlist zu laden. Also erklär ich das ganze noch einmal: Da es Logfiles sind, können in mehreren Logs die selben Datensätze stehen, wenn ich jetzt die Logfiles von heute von 12:00 und 14:00 was ja dann 2 Logfiles wären laden will, tue ich dies mit dem hintergedanken beide nach dem selben Suchkriterium zu durchsuchen. Das RichEdit dient nur zur Anzeige der Daten, eigentlich stehen sie in einer Stringlist, da ich auch eine Funktion weiterblättern habe. Diese Funktion sieht so aus, dass aus der Stringlist nur jeweils nur 50 Datensätze pro "Seite" angezeigt werden um das ganze überschaubarer zu halten, denn 1000 Datensätze in einem RichEdit wären ja nicht gerade überschaubar. Wenn man nun also auf nächste Seite klickt werden die nächsten 50 Datensätze aus der StringList in das RichEdit geladen. Deswegen kann ich auch nur eine Stringlist verwenden.

Also noch einmal meine Frage: Hat jemand eine Idee wie ich mehrere Dateien (da hier immer von drei die rede ist, es können auch mehr als drei sein) in eine StringList laden kann (ich brauch sie wirklich NUR in der Stringlist!)

Hoffe ich habe das jetzt besser erklärt und jeder weiß jetzt ungefähr was ich brauche.

Wäre super wenn mir jemand helfen könnte!

@Uwe Raabe: Das ist auch ne gute Idee, aber da ich ja nicht weiß wieviele Dateien geladen werden wird das mit den vielen Strinlisten auch nicht grad unkompliziert oder? :gruebel:

Naja, hoffe es kann mir jemand helfen.

Gruß
AnyKey

DeddyH 17. Dez 2009 08:12

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Zitat:

Zitat von AnyKey
@Uwe Raabe: Das ist auch ne gute Idee, aber da ich ja nicht weiß wieviele Dateien geladen werden wird das mit den vielen Strinlisten auch nicht grad unkompliziert oder? :gruebel:

Inwiefern? Ich hätte dasselbe vorgeschlagen (gut, man könnte das auch mit AssignFile, readln usw. machen, aber das kommt ja auf dasselbe heraus).

Tyrael Y. 17. Dez 2009 08:30

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Zitat:

Zitat von AnyKey
@Uwe Raabe: Das ist auch ne gute Idee, aber da ich ja nicht weiß wieviele Dateien geladen werden wird das mit den vielen Strinlisten auch nicht grad unkompliziert oder? :gruebel:


Du brauchst nur 2 Stringlisten.
Eine ist deine Gesamt-Stringliste in der alle Einträge landen.
Die zweite ist eine Hilfsliste die nur zum Laden gebraucht wird.

Du lädst den Inhalt einer Datei in die Hilfsliste.
Weist alle Einträge der Hilfsliste der Gesamtliste zu.
Leerst die Hilsliste.
Liest die nächste Datei in die Hilfsliste.
usw.

AnyKey 17. Dez 2009 08:36

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Hi,

danke für die schnellen Antworten!

@Tyrael: Auf die Idee war ich auch gekommen :) trotzdem Danke!!

Also es funktioniert jetzt

Delphi-Quellcode:
helpList := TStringList.Create;
for i := 0 to OpenDialog.Files.Count-1 do
begin
  helpList.LoadFromFile(OpenDialog.Files[i]);
  Child.ausgabeList.AddStrings(helpList);
end;
FreeAndNil(helpList);
So sieht meine Lösung aus, funktioniert auch super!!

Danke noch mal an alle!! :thumb:

Gruß
AnyKey

DeddyH 17. Dez 2009 08:57

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
Jetzt noch ein Ressourcenschutzblock und das wird brauchbar :mrgreen:
Delphi-Quellcode:
helpList := TStringList.Create;
try
  for i := 0 to OpenDialog.Files.Count-1 do
  begin
    helpList.LoadFromFile(OpenDialog.Files[i]);
    Child.ausgabeList.AddStrings(helpList);
  end;
finally
  FreeAndNil(helpList);
end;

AnyKey 17. Dez 2009 09:07

Re: Mehrere Dateien in StringList Laden und wieder speichern
 
:mrgreen: Jo das wär auch noch nen guter Plan :)

Hab ich noch eingebaut, danke für den Tipp ;)

Gruß
AnyKey


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz