Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Beratung und Hilfe Array Speichern (https://www.delphipraxis.net/174649-beratung-und-hilfe-array-speichern.html)

IltisvdT 3. Mai 2013 07:09

Beratung und Hilfe Array Speichern
 
Hallo,
ich benötige einmal mehr eure Beratung und Hilfe. Ich habe einige Daten und möchte ie gerne speichern. Soweit so gut. Es handelt sich ausschließlich um Zahlenwerte (int und double). Es ist aber ein Mischmasch aus einzelnen Variablen und eindmensionalen Arrays. Diese wüde ich nun gerne speichern. Mein Anspruch ist aber, dass ich die Daten in einem externen Programm auch bearbeiten kann. Hier im Forum wird dafür eine csv vorgeschlagen. Nicht so wichtig ist mir die Darstellungsform. Soll heißen, dass es nicht sofort ersichtlich sein muss, welche Zahl für was steht. Könnt ihr mir Tipps geben, wo ich etwas darüber lesen kann? Oder mir vielleicht auch Codebrocken zur Verfügung stellen? Vielen Dank

DeddyH 3. Mai 2013 07:18

AW: Beratung und Hilfe Array Speichern
 
Zum externen Bearbeiten wirst Du um eine Speicherung in Textform wohl nicht herumkommen. Geeignete Formate könnten z.B. XML, JSON oder ggf. sogar IniFiles sein. Da es sich nach meiner Lesart anscheinend um irgendwie verschachtelte Daten handeln könnte, halte ich CSV hier für nicht so optimal, aber da kann ich auch irren.

Mavarik 3. Mai 2013 07:34

AW: Beratung und Hilfe Array Speichern
 
Wie wäre es damit die Daten einfach in eine Datei auf die Platte zu schreiben?

Mavarik

IltisvdT 3. Mai 2013 07:44

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von Mavarik (Beitrag 1213923)
Wie wäre es damit die Daten einfach in eine Datei auf die Platte zu schreiben?

Mavarik

genau das habe ich vor.

Zitat:

Zitat von DeddyH (Beitrag 1213922)
Zum externen Bearbeiten wirst Du um eine Speicherung in Textform wohl nicht herumkommen. Geeignete Formate könnten z.B. XML, JSON oder ggf. sogar IniFiles sein. Da es sich nach meiner Lesart anscheinend um irgendwie verschachtelte Daten handeln könnte, halte ich CSV hier für nicht so optimal, aber da kann ich auch irren.

Verschachtelt...kann ich nicht genau beurteilen. Es sind auch nicht viele Werte. 2 Integervariablen, 1 array of integer und ein array of double. Wenn ich das so gespeichert kriegen würde, dass ich es mit nem Editor oder excel oder was immer öffnen und bearbeiten kann wäre das toll. Dabei würde ich mir das so vorstellen, dass jede neue Variable eine Zeile kriegt, sodass da zwei Einzelwerte untereinanderstehen und dann je ein Array über die ganze Zeile.

Klaus01 3. Mai 2013 07:47

AW: Beratung und Hilfe Array Speichern
 
Guten Morgen,

du solltestt schon wissen, welche Programme die Datei lesen können sollen.
Das grenzt das Abspeicherformat in der Regel stark ein.

Grüße
Klaus

baumina 3. Mai 2013 07:53

AW: Beratung und Hilfe Array Speichern
 
Wenn Du es nicht aufwändig machen magst, nimm eine TStringList, schreibe die Werte mit Add(Zahl) und die Arrays mit Add(Zahl, Zahl, Zahl) dann SaveToFile und du hast schnell eine einfache Textdatei zum bearbeiten.

IltisvdT 3. Mai 2013 08:15

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von Klaus01 (Beitrag 1213925)
Guten Morgen,

du solltestt schon wissen, welche Programme die Datei lesen können sollen.
Das grenzt das Abspeicherformat in der Regel stark ein.

Grüße
Klaus

Ok, da geb ich dir recht. Ein normaler Editor sollte immer funktionieren. Alles was darüber hinaus geht ist Spielerei.

Zitat:

Zitat von baumina (Beitrag 1213926)
Wenn Du es nicht aufwändig machen magst, nimm eine TStringList, schreibe die Werte mit Add(Zahl) und die Arrays mit Add(Zahl, Zahl, Zahl) dann SaveToFile und du hast schnell eine einfache Textdatei zum bearbeiten.

Mit "nicht zu aufwändig" triffst du es sehr gut. Sowas in der Art hatte ich auch schon gefunden. Nur funktioniert das auch halbwegs gut mit Arrays? Denn die Arrays können mitunter lang werden und sind auch unterschiedlich lang. Von daher würde ich ungern add(array[o],array[1],...) schreiben.

baumina 3. Mai 2013 08:20

AW: Beratung und Hilfe Array Speichern
 
so in der Art meinte ich:

Delphi-Quellcode:
s := '';
for i := 0 to x do
begin
  if i > 0 then s := s + ',';
  s := s + IntToStr(Array[i]);
end;
aStringList.Add(s);

IltisvdT 3. Mai 2013 08:22

AW: Beratung und Hilfe Array Speichern
 
Wow. Vielen Dank. Das sieht vielversprechend aus. Werde es gleich mal probieren.

Sir Rufo 3. Mai 2013 08:23

AW: Beratung und Hilfe Array Speichern
 
Es kommt immer auf die Interpretation der Daten an.

Beispiel:

Ein Texteditor zeigt für eine Datei folgendes an
Code:
42
Preisfrage: Welche Zahl ist dort in der Datei gespeichert?

Antwort: 3276852 (Integer)

Warum nicht 42?

Die Datei beinhaltet folgende Bytes
Code:
00 34 00 32
Mit einem Texteditor werden diese Bytes interpretiert als Text (UTF-8 ohne BOM) und dadurch als 42 angezeigt.
Mein Programm hat aber den Integer-Wert 3276852 dort gespeichert.
Delphi-Quellcode:
program WriteData;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, Classes;

var
  Stream : TStream;
  Data :  Integer;

begin
  try
    Data := 3276852;

    Stream := TFileStream.Create( 'test.dat', fmCreate );
    try
      Stream.WriteData( Data );
    finally
      Stream.Free;
    end;

  except
    on E : Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;

end.
Entweder die Struktur der Datei ist dem Programm komplett bekannt, oder es müssen halt Strukturinformationen mit in die Datei (so wie bei XML, JSON, etc.). Dann muss das Programm nur noch wissen, um welches Format es sich handelt und kann die restlichen Strukturinformationen dort herauslesen.

DeddyH 3. Mai 2013 08:40

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von Sir Rufo (Beitrag 1213932)
Entweder die Struktur der Datei ist dem Programm komplett bekannt, oder es müssen halt Strukturinformationen mit in die Datei (so wie bei XML, JSON, etc.). Dann muss das Programm nur noch wissen, um welches Format es sich handelt und kann die restlichen Strukturinformationen dort herauslesen.

Wenigstens einer hat gleich verstanden, worauf ich hinauswollte :thumb:

Mavarik 3. Mai 2013 08:43

AW: Beratung und Hilfe Array Speichern
 
oder "oldschool"

Delphi-Quellcode:
var
  MyArray : array of Integer;
  fd     : file;  
begin
  // ... Setlength... Belege Array ab 1 usw..
  assignfile(fd,'MeineDaten.MDD'); // MDD= MeineDatenDatei ;-)
  reset(fd,1);
  try
    MyArray[0] := Length(MyArray);
    Blockwrite(fd,MyArray[0],MyArray[0]*Sizeof(Integer));
  finally
    Closefile(fd);
  end;
end;
Mavarik

PS.: Ich würde sagen, es gibt keinen schnelleren DelphiCode um das Array zu speichern...

DeddyH 3. Mai 2013 08:45

AW: Beratung und Hilfe Array Speichern
 
Und wie sieht das dann im Editor aus?

baumina 3. Mai 2013 08:48

AW: Beratung und Hilfe Array Speichern
 
Ei machts doch dem Bub net so schwer :lol:

Mavarik 3. Mai 2013 08:51

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von DeddyH (Beitrag 1213936)
Und wie sieht das dann im Editor aus?

1. Aufgabenstellung war: In einen externen Programm...

Nicht ich will 100000 integer,double in einem Texteditor bearbeiten...
Möglichst noch ohne zu wissen in welcher Zeile ich stehe...

"Bearbeiten" ist vielleicht zu weit gefasst...

Mavarik :coder:

Mavarik 3. Mai 2013 08:52

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von baumina (Beitrag 1213937)
Ei machts doch dem Bub net so schwer :lol:

Ist doch immer schon, wie viele Ansätze es gibt...

:oops:

Sir Rufo 3. Mai 2013 08:57

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von baumina (Beitrag 1213937)
Ei machts doch dem Bub net so schwer :lol:

Er hat doch explizit danach gefragt, wo er zu diesem Thema etwas nachlesen kann.
Ich habe ihm mit meiner Antwort das Link-Klicken gespart.

Aber eine konkrete Frage mit konkreten Rahmenbedingungen könnte natürlich auch zu einer konkreten Antwort führen.
Dazu müsste diese aber auch konkret gestellt werden. :mrgreen:

baumina 3. Mai 2013 09:02

AW: Beratung und Hilfe Array Speichern
 
Also wenn sich jemand schon so tierisch über eine kleine for-Schleife freut, kann man wohl davon ausgehen, dass wir hier keine mathematisch perfekt kalkulierte Mondumrundung anbieten sollten.

p80286 3. Mai 2013 11:05

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von baumina (Beitrag 1213943)
Also wenn sich jemand schon so tierisch über eine kleine for-Schleife freut, kann man wohl davon ausgehen, dass wir hier keine mathematisch perfekt kalkulierte Mondumrundung anbieten sollten.

Und ausgerechnet da könnte es sein, daß deine "Mondumrundung" für andere ein Morgenspaziergang ist. Ich für meinen Teil hätte Mavariks Lösung vorgeschlagen.
Daten in Datei fertig.
Daten aus Datei lesen und gut ist.

Warum sollte die Bearbeitung über ein externes/anderes Programm laufen wo doch mein Programm genau weiß (wissen sollte) was da wo steht.

Von Datenaustausch (ASCII delimited und Konsorten) ist nicht die Rede gewesen.

Gruß
K-H

DeddyH 3. Mai 2013 11:59

AW: Beratung und Hilfe Array Speichern
 
Zitat:

Zitat von IltisvdT (Beitrag 1213920)
Es handelt sich ausschließlich um Zahlenwerte (int und double). Es ist aber ein Mischmasch aus einzelnen Variablen und eindmensionalen Arrays. Diese wüde ich nun gerne speichern. Mein Anspruch ist aber, dass ich die Daten in einem externen Programm auch bearbeiten kann.

Wie man das mit BlockRead bzw. generell binären Dateiformaten hinbekommen will, ist mir ein Rätsel, zumal ja nicht gesagt wurde, ob es sich ggf. sogar um dynamische Arrays handeln könnte.

p80286 3. Mai 2013 13:06

AW: Beratung und Hilfe Array Speichern
 
(Alles Quark), es ist Freitag, die Sonne scheint und vielleicht wissen wir am Montag was der TE wirklich benötigt.


Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.

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