AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Array of String in einer externen Datei speichern und laden
Thema durchsuchen
Ansicht
Themen-Optionen

Array of String in einer externen Datei speichern und laden

Ein Thema von Kegasetu · begonnen am 2. Dez 2020 · letzter Beitrag vom 3. Dez 2020
Antwort Antwort
Seite 1 von 2  1 2      
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#1

Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:08
Hallo Zusammen. Dies wird wohl vorerst mein letzter Thread sein, ich stehe nun kurz vor Vollendung meines Programmes.

Zum Thema
Ich habe ein paar Str. Werte in einem Array gespeichert, welche in einer externen Datei gespeichert und im Anschluss wieder ausgelesen werden sollen. Mit einem Array of extended hat das wunderbar funktioniert:
Delphi-Quellcode:

procedure TForm2.Werte_speichernClick(Sender: TObject);
var fs:TFileStream;

    i : integer;

begin


  fs:=TFileStream.create(ExtractFilePath(ParamStr(0)) + 'Projekte\' + edit8.Text + '\Daten.dat',fmCreate);


try
 fs.write(db,sizeOf(db));
finally
 fs.free;
end;



procedure TForm2.Werte_ladenClick(Sender: TObject);
var fs:TFileStream;

begin
 if fileExists(ExtractFilePath(ParamStr(0)) + 'Projekte\' + edit8.Text + '\Daten.dat') then
begin
  fs:=TFileStream.create(ExtractFilePath(ParamStr(0)) + 'Projekte\' + edit8.Text + '\Daten.dat',fmOpenRead);
  try
    if fs.size >= sizeOf(db) then
    begin
     fs.read(db,sizeOf(db));
    end;
  finally
    fs.free;
  end;
end else showMessage('Werte nicht auffindbar');



end;
Den Code habe ich abgeschrieben. Mit einem String hat das ganze nicht funktioniert, dazu habe ich auch leider nichts hilfreiches gefunden.

Hier wird das Thema mal aufgegriffen, aber nicht weiter geklärt : https://www.delphipraxis.net/108616-...speichern.html

Um das Problem zu lösen, habe ich drei Ideen, 1. es analog versuchen, 2. die Werte in einer StringList speichern, da hier die Möglichkeit des Speicherns und Ladens schon gegeben ist. 3. die Strings Binär umwandeln

Leider hat mich keine Idee zum Erfolg gebracht, aber vielleicht hat hier jemand noch eine Vorschlag, den ich ausprobieren kann.

Vielen Dank für Unterstützung!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:16
.. eine Array of extended hat eine fest definierte Größe.
Ein Array of String hat keine fest definerte Größe, die Strings in dem Array können alle unterschiedlich lang sein.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:17
Im Gegensatz zu Extended hat ein String ja keine feste Größe, da musst Du schon etwas mehr Aufwand betreiben. So könntest Du je Array-Element zunächst dessen Länge (oder Bytegröße) in Deinen Stream schreiben und anschließend den eigentlichen String. Beim Lesen dann andersherum: zuerst die Länge auslesen, entsprechend Speicher reservieren und dann aus dem Stream lesen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:31
Hm, warum nicht in einer TStringList umfüllen?
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#5

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:33
.. eine Array of extended hat eine fest definierte Größe.
Ein Array of String hat keine fest definerte Größe, die Strings in dem Array können alle unterschiedlich lang sein.

Grüße
Klaus
Es wäre doch bestimmt möglich Zeile für Zeile das Dokument mit den Inhalten des Arrays zu füllen?
Um das mal verbal zu beschreiben. Ich schreibe die Werte des Arrays in ein Dokument (Jedes Element eine Zeile). Dann lese ich jede Zeile bis zu einem Wert x aus und hänge alle Zeichen die kein '' sind aneinander und befülle anschließend wieder mein Array.

Blöde Frage, wie kann ich so etwas umsetzten?
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#6

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 10:34
Hm, warum nicht in einer TStringList umfüllen?
Habe ich probiert, aber ich weiss nicht wie ich die Werte daraus wieder ins Array zurückbekomme.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 11:43
So würde ich den Inhalt der Stringlist ins Array wieder einlesen:

Delphi-Quellcode:
var
  Form1: TForm1;
  StrArr: array of string;
  MyStringList: TStringList;

procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
for I := 0 to MyStringList.Count - 1 do //Stringliste Zeilenweise abarbeiten
  begin
  SetLength(StrArr,Length(StrArr)+1); //Speicher reservieren
  StrArr[High(StrArr)] := MyStringList.Strings[I]; //Strings ins Array schreiben
  end;
MyStringList.Free;
//nur zur Kontrolle den Inhalt des StringArrays in einem Memo anzeigen
for I := 0 to High(StrArr) -1 do
  begin
  Memo1.Lines.Add(StrArr[I]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyStringList := TStringList.Create;
MyStringList.LoadFromFile('test.bla');
end;
Steffen
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
659 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 11:48
Falls du nicht den "Umweg" über die Stringliste gehen willst, kannst du dein Array auch direkt zeilenweise in eine Datei schreiben. Am komfortabelsten finde ich das mittels eines TStreamWriters, dort dann die Methode WriteLine.

Analog gibt es zum Lesen den TStreamReader mit der Methode ReadLine.

Vielleicht ist das ja auch noch mal eine Anregung.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 12:16
oder auch so:
Delphi-Quellcode:
var
  StrArr: TArray<string>;

begin
  StrArr := MyStringList.ToStringArray;

  Memo.Lines.Clear;
  Memo.Lines.AddStrings(StrArr);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#10

AW: Array of String in einer externen Datei speichern und laden

  Alt 2. Dez 2020, 12:21
So würde ich den Inhalt der Stringlist ins Array wieder einlesen:

Delphi-Quellcode:
var
  Form1: TForm1;
  StrArr: array of string;
  MyStringList: TStringList;

procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
for I := 0 to MyStringList.Count - 1 do //Stringliste Zeilenweise abarbeiten
  begin
  SetLength(StrArr,Length(StrArr)+1); //Speicher reservieren
  StrArr[High(StrArr)] := MyStringList.Strings[I]; //Strings ins Array schreiben
  end;
MyStringList.Free;
//nur zur Kontrolle den Inhalt des StringArrays in einem Memo anzeigen
for I := 0 to High(StrArr) -1 do
  begin
  Memo1.Lines.Add(StrArr[I]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MyStringList := TStringList.Create;
MyStringList.LoadFromFile('test.bla');
end;
Steffen
Danke für den Code, aber irgendwie blicke ich noch nicht so ganz durch. Das Erste was ich mache, ist die Stringlist zu füllen. Das habe ich so gemacht:
Delphi-Quellcode:

procedure TForm2.Werte_speichernClick(Sender: TObject);
var fs,ds:TFileStream;

    i : integer;

    bsb : TStringList;

begin

  bsb.Create;

try

  for i := 0 to 519 do
    bsb.Add(bzb[i]);


end;
Hier bekomme ich immer die Meldung, dass eine Zugriffverletzung bei Adresse ... vorliegt.
bzb ist bereits voll definiert, also von 0 bis 519, und zwar mit ''
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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