| Autor |
Beitrag |
klausiemausie
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 19:18
Sorry wenn ich frage, aber ich bin auf der Suche nach einem Beispielcode für das Speichern von arrays mit dem Savedialog, so dass der User einen Ort und einen Namen aussuchen kann für die Datei. hab suche schon benutzt und auch bruder google, wie man das mit savetofile löst hab ich gefunden, aber einen code wie das mit dem dialog klappt leider nicht. vielleicht hat ja einer von euch einen Beispielcode parat.
danke klaus
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.02.09 19:29
Delphi-Quelltext 1: 2:
| if SaveDialog.Execute then Speichern(SaveDialog.Filename); |
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 19:30
hm ok, und was ist das "Speichern" in zeile 2, die variable die ich speichern will?
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Sa 28.02.09 19:35
HI,
speichern is ne Proezedur und die würd ich so machen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure Speichern(FileName: String; array: array of String); var list: TStringList; var i: Integer; begin list := TStringList.Create; for i := 0 to High(array) do List.add(array[i]); list.saveToFile(FileName); list.free; end; |
und so rufst du die dann auf:
Delphi-Quelltext 1: 2:
| if SaveDialog1.Execute then Speichern(SaveDialog1.FileName, MyArray); |
so sollte das funzen habs aber noch net getestet...
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 28.02.09 19:37
Die procedure, die für das Speichern verantwortlich ist  .
Poste bitte mal dein array bzw. Record. Was hast du drin?
Gugg mal bei www.delphi-treff.de/tipps/object-pascal/ da findest du 2 Themen (dyn array abspeichern und records abspeichern) Beides geht nur, wenn Du im Array bzw Record nicht strings hast, sondern shortstrings (z.B. name:string[20]);
Ansonsten würde ich dir Streams empfehlen und alles einzeln speichern, hast du auf die Dauer und bei Änderungen mehr Freude dran.
Gruß Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 19:51
ich möchte 2 arrays speichern, einmal einen array wo nur zahlen von 0-2 drin stehen und einen wo auch grössere zahlen drin stehen, bis 10.000 oder so.
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 28.02.09 19:57
wenn beide zusammen in eine Datei sollen, dann gehts nicht mit den oben genannten, würde dir dann wirklich Streams empfehlen.
Prinzipiell gibt es da im Forum ein paar Beiträge, (z.B. www.delphi-forum.de/...p;highlight=streams) ist zwar für Objekte, das Proinzip für ein dyn Array ist aber das gleiche.
poste aber trotzdem mal deine array-definition
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 20:12
Region: Array[1..35] of single;
Zugehoerigkeit: Array[1..35] of byte;
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 20:57
Hier ein kleines Beispiel dafür, du brauchst nur zwei Buttons, dann sollte das so klappen: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
| procedure TForm1.Button1Click(Sender: TObject); var Region: array[1..35] of Single; Zugehoerigkeit: array[1..35] of Byte; TestFile: TFileStream; TestMemStream: TMemoryStream; i: Integer; begin for i := Low(Region) to High(Region) do begin Region[i] := i; Zugehoerigkeit[i] := i; end;
TestFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'test.txt', fmCreate); try TestMemStream := TMemoryStream.Create; try TestMemStream.SetSize(Length(Region) * SizeOf(Single)); CopyMemory(TestMemStream.Memory, @Region[Low(Region)], Length(Region) * SizeOf(Single)); TestMemStream.Position := 0; TestFile.CopyFrom(TestMemStream, TestMemStream.Size);
TestMemStream.SetSize(Length(Zugehoerigkeit) * SizeOf(Byte)); CopyMemory(TestMemStream.Memory, @Zugehoerigkeit[Low(Region)], Length(Zugehoerigkeit) * SizeOf(Byte)); TestMemStream.Position := 0; TestFile.CopyFrom(TestMemStream, TestMemStream.Size); finally TestMemStream.Free; end; finally TestFile.Free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var Region: array[1..35] of Single; Zugehoerigkeit: array[1..35] of Byte; TestFile: TFileStream; TestMemStream: TMemoryStream; i: Integer; begin TestFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'test.txt', fmOpenRead); try TestMemStream := TMemoryStream.Create; try TestMemStream.CopyFrom(TestFile, Length(Region) * SizeOf(Single)); CopyMemory(@Region[Low(Region)], TestMemStream.Memory, Length(Region) * SizeOf(Single));
TestMemStream.Position := 0; TestMemStream.CopyFrom(TestFile, Length(Zugehoerigkeit) * SizeOf(Byte)); CopyMemory(@Zugehoerigkeit[Low(Region)], TestMemStream.Memory, Length(Zugehoerigkeit) * SizeOf(Byte)); finally TestMemStream.Free; end; finally TestFile.Free; end;
for i := Low(Region) to High(Region) do begin ShowMessage(FloatToStr(Region[i])); ShowMessage(IntToStr(Zugehoerigkeit[i])); end; end; |
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 21:13
mit dem 2. button lade ich das dann quasi wieder oder?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 21:33
Ja, genau. Bei dynamischen Arrays müsstest du die Größe mit speichern.
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 21:59
also ich hab das mal so ausprobiert, aber es funktioniert nicht. weil der soll ja inner showmessage den inhalt des jeweiligen arrays anzeigen im 2. button, aber der zeit immer nur 2 mal 1 , 2 mal die 2 , 2 mal die 3, also in jedem array nur i quasi, soll ja aber eig nich so sein oder?
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 28.02.09 22:21
also ein klein wenig solltest Du dich mit dem geposteten schon auseinandersetzen, nicht bloß abkopieren
| Zitat: |
for i := Low(Region) to High(Region) do
begin
Region[i] := i;
Zugehoerigkeit[i] := i;
end;
|
mußt du natürlich rausnehmen, das hat jaenicke nur zum testen reingeschrieben
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 22:43
oh, total übersehen, ähm ja, ich habs mir natürlich durchgelesen, habs auch versucht zu verstehen, aber das ist ein anderes thema
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 22:49
ja aber wenn da drin steht dass dann region[i]:=i is, dann wird ja der eig inhalt des arrays gar nich gespeichert....durch was muss ich das ersetzen?
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: Sa 28.02.09 22:53
das
| Zitat: |
Region: array[1..35] of Single;
Zugehoerigkeit: array[1..35] of Byte;
|
muß aus der buttonclick auch noch raus.
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 23:15
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 23:31
jetz hab ichs hinbekommen, funktioniert alles so wies geht, danke nochma
|
|
klausiemausie 
      
Beiträge: 98
Win XP, Win Vista Ultimate
Delphi 6
|
Verfasst: Sa 28.02.09 23:42
eine frage hättich dann aber noch: wie bekomme ich es hin, dass der user den namen der Datei aussuchen kann, und dann beim laden die auch wieder auswählen kann?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 23:43
Ich hoffe du hast den Quelltext auch verstanden, so dass du sowas dann auch selbst benutzen kannst, wenn du etwas ähnliches wieder brauchst.
Für das Auswählen der Datei gibt die Komponente TSaveDialog unter Dialogs.
// EDIT:
Aber Moment mal, das stand doch als erste Antwort oben schon da. 
|
|