Autor Beitrag
klausiemausie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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



BeitragVerfasst: Sa 28.02.09 19:29 
ausblenden Delphi-Quelltext
1:
2:
if SaveDialog.Execute then
  Speichern(SaveDialog.Filename);
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 28.02.09 19:30 
hm ok, und was ist das "Speichern" in zeile 2, die variable die ich speichern will?
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: Sa 28.02.09 19:35 
HI,

speichern is ne Proezedur und die würd ich so machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Speichern(FileName: Stringarrayarray of String);
var list: TStringList;
var i: Integer;
begin
  list := TStringList.Create;
  for i := 0 to High(arraydo
    List.add(array[i]);
  list.saveToFile(FileName);
  list.free;
end;



und so rufst du die dann auf:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 28.02.09 20:12 
Region: Array[1..35] of single;
Zugehoerigkeit: Array[1..35] of byte;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.02.09 20:57 
Hier ein kleines Beispiel dafür, du brauchst nur zwei Buttons, dann sollte das so klappen:
ausblenden volle Höhe Delphi-Quelltext
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..35of Single;
  Zugehoerigkeit: array[1..35of 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
      // Die Größe des MemoryStreams setzen
      TestMemStream.SetSize(Length(Region) * SizeOf(Single));
      // Den Speicherbereich des Arrays in den des Streams kopieren
      CopyMemory(TestMemStream.Memory, @Region[Low(Region)], Length(Region) * SizeOf(Single));
      // Die Position zum Lesen auf den Anfang setzen
      TestMemStream.Position := 0;
      // Und von dort aus den Inhalt in die Datei kopieren
      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..35of Single;
  Zugehoerigkeit: array[1..35of Byte;
  TestFile: TFileStream;
  TestMemStream: TMemoryStream;
  i: Integer;
begin
  TestFile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'test.txt', fmOpenRead);
  try
    TestMemStream := TMemoryStream.Create;
    try
      // Aus der Datei einen Block in der Größe des Arrays lesen
      TestMemStream.CopyFrom(TestFile, Length(Region) * SizeOf(Single));
      // Und den Speicherbereich kopieren
      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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 28.02.09 21:13 
mit dem 2. button lade ich das dann quasi wieder oder?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.02.09 21:33 
Ja, genau. Bei dynamischen Arrays müsstest du die Größe mit speichern.
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.02.09 23:15 
user profile iconklausiemausie hat folgendes geschrieben Zum zitierten Posting springen:
oh, total übersehen, ähm ja, ich habs mir natürlich durchgelesen, habs auch versucht zu verstehen, aber das ist ein anderes thema
Wenn du etwas nicht verstehst, dann frag doch nach. Das ist ja kein Problem, aber du musst eben sagen was genau du nicht verstehst. :wink:
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Sa 28.02.09 23:31 
jetz hab ichs hinbekommen, funktioniert alles so wies geht, danke nochma
klausiemausie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :lol: ;-)