Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   textbestand einlesen mit 2D array... (https://www.delphipraxis.net/61915-textbestand-einlesen-mit-2d-array.html)

student 27. Jan 2006 20:59


textbestand einlesen mit 2D array...
 
hallo,
wir brauchen dringend hilfe!!!!
kann uns jemand sagen wie man einen textbestand, der aus mehreren spalten besteht, so einlesen kann, dass man danach die einzelnen spalten miteinander vergleichen kann.

der bestant sieht so aus:
-0.38 1.88 -5.04 -4.11 -6.41 2.05 -2.48
2.21 -0.14 5.66 5.34 -7.53 -3.24 1.81 -1.75
0.62 -1.85 7.74 9.12 -10.09 -6.53 -7.96 -14.32
1.47 -0.02 8.96 5.70 -13.51 -12.39 -21.51 -26.77
1.47 0.11 6.64 6.68 -12.90 -8.24 -25.17 -28.36

wir müssen die correlation zwischen den einzelnen spalten berechnen. die erste spalte können wir einlesen, aber wir schaffen es nicht die 2. einzulesen( der bestand besteht aus 8 spalten mit jeweils 511 zeilen :wall: )!!! wir müssen dabei mit einem 2-dimensionalen array arbeiten....

vielen vieln dank im voraus für die hilfe!!!

Khabarakh 27. Jan 2006 21:01

Re: textbestand einlesen mit 2D array...
 
Zitat:

Zitat von student
die erste spalte können wir einlesen, aber wir schaffen es nicht die 2. einzulesen( der bestand besteht aus 8 spalten mit jeweils 511 zeilen :wall: )!!!

Dann wäre der bisherige Code nicht schlecht :wink: .

edosoft 27. Jan 2006 21:06

Re: textbestand einlesen mit 2D array...
 
@student:
Zitat:

der bestand besteht aus 8 spalten mit jeweils 511 zeilen
da sagt man dann "512 zeilen mit je 8 spalten" :)

versuch doch einfach des immer zu suchen
weist wie ich mein? du suchst die nächste leerstelle und immer wenn du eine hast inkrementierst du den array öh index und speicherst den wert, dann löscht du ihn ausem puffer raus und suchst die nächste leerstelle.
und wenn am anfang \r\n steht also #10#13 dann inkrementierst du den übergeordneten array und wieder von vorn.

Christian Seehase 27. Jan 2006 23:39

Re: textbestand einlesen mit 2D array...
 
Moin Student,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

In welcher Form liegen jetzt die Daten vor?
Eine Textdatei, die Du, z.B., auch mit dem Notepad ansehen/bearbeiten kannst?
Wie sehen die Zeilenvorschübe aus?
Womit sind die Spalten getrennt? Immer Blank?

edosoft 28. Jan 2006 00:16

Re: textbestand einlesen mit 2D array...
 
Christian Seehase:

So wie erst hier schreibt sinds leerzeilen bzw. zeilenumbrüche...
ob er jetzt den carriage return drin hat kann man ja so schlecht sagen :)

Sir Rufo 28. Jan 2006 01:40

Re: textbestand einlesen mit 2D array...
 
Ich persönlich löse das immer über einen Zugriff per Datenbank (Text-Treiber von MS)
Schau mal hier
Die Datei schema.ini müsste also in diesem Fall wie folgt aussehen (Dateiname mit den Daten hier jetzt mal Daten.txt angenommen:

Code:
[Daten.txt]
Format=Delimited( )
ColNameHeader=False
DecimalSymbol=.

Col1=Wert1 Double
Col2=Wert2 Double
Col3=Wert3 Double
Col4=Wert4 Double
Col5=Wert5 Double
Col6=Wert6 Double
Col7=Wert7 Double
Col8=Wert8 Double
Ja und jetzt kann man schon auf die Tabelle zugreifen mit
SQL-Code:
select * from Daten.txt
Einfacher geht das eigentlich nicht ... und vor allem stört jetzt auch nicht, wenn eine Spalte fehlt oder hinzugefügt wird (am Ende natürlich ;-) )

cu

ichbins 28. Jan 2006 06:56

Re: textbestand einlesen mit 2D array...
 
probiers einfach mal so:
Delphi-Quellcode:
var
  i,j:integer;
  ARRAYX:array[1..8,1..500nochmalwas] of real;
  t:textfile;
  zeile:string;
begin
  assignfile(t,DATEINAME);
  reset(t);
  for i:=1 to 500nochmalwas do begin
    readln(t,zeile);
    {wie du jetzt die Zeile in das Array übertragn kannst weisst du ja.}
    for j:=1 to 8 do begin
      arrayx[j,i]:=element[j] der Variable Zeile
    end;
  end;
end;

Sir Rufo 28. Jan 2006 09:43

Re: textbestand einlesen mit 2D array...
 
Wenn ich mir die Beispiel-Daten oben ansehe, dann fällt mir auf, dass in der ersten Zeile nur 7 Werte gespeichert sind.
Wenn das wirklich ein Auszug der Echtdaten ist, dann laufen diese Lösungen ins Leere ...

Mit dem Text-Treiber ist das allerdings kein Problem ;-)

cu

student 28. Jan 2006 11:39

Re: textbestand einlesen mit 2D array...
 
hallo nochmal,
vielen dank für die vielen und schnellen antworten. wir sind jetzt so weit, dass jede 3. zahl aus dem bestand eingelesen wird, keine ahnung warum. leider immer noch nciht spalte für spalte. einlesen müssen wir das ganze aus einer textfile...wäre toll, wenn vielleicht jemand eine idee hätte...hier mal ein auszug unseres codes:

Delphi-Quellcode:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
TkolomArray = array[0..511] of real;
TdataArray = array[0..7] of Tkolomarray;
var
  Form1: TForm1;
  openarray : Tdataarray;
  closedarray: Tdataarray;
  mijntext: textfile;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
j: integer;
i:integer;
k:integer;
l:integer;

begin
assignfile(mijntext,'open.txt');
reset(mijntext);
i:=0;
j:=0;
while not(eof(mijntext)) do begin
read (mijntext, openarray[i,j]);

for l:=0 to j do begin
 read(mijntext, openarray[i,j]);

 for k:=0 to i do begin
 read (mijntext, openarray[i,j]);

 memo1.lines.add(floattostr(openarray[i,j]));
 end;
 end;
end;
 closefile(mijntext);
end;

end.
vielen dank nochmal und ein schönes wochenende allerseits....

[edit=Christian Seehase]Delphi-Tags gesetzt, bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

ichbins 28. Jan 2006 11:54

Re: textbestand einlesen mit 2D array...
 
schließe deinen Delphi-Code doch bitte in die Delphi-Tags ein:
[delphi ] CODE [/delphi ] (ohne Leerzeichen)

Zitat:

Delphi-Quellcode:
TkolomArray = array[0..511] of real;
TdataArray = array[0..7] of Tkolomarray;

machs doch so:
Delphi-Quellcode:
tdataarray=array[0..7,0..511] of real;
Zitat:

Delphi-Quellcode:
j: integer;
i:integer;
k:integer;
l:integer;

viel kürzer:
Delphi-Quellcode:
i,j,k,l:integer;
und formatiere deinen Code doch bitte mit Einrückungen.

nur mal als Tipp: probier readln statt read.

also jetzt nur mal der wichtige Code wie ich ihn formatieren würde:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,k,l:integer;
begin
  assignfile(mijntext,'open.txt');
  reset(mijntext);
  i:=0;
  j:=0;
  while not(eof(mijntext)) do begin
    read (mijntext, openarray[i,j]);
    for l:=0 to j do begin
      read(mijntext, openarray[i,j]);
      for k:=0 to i do begin
        read (mijntext, openarray[i,j]);
        memo1.lines.add(floattostr(openarray[i,j]));
      end;
    end;
  end;
  closefile(mijntext);
end;
und jetzt, da er lesbar ist, die Verbesserung:

Delphi-Quellcode:
var
  i,j,k:integer;
  t:textfile;
  zeile,acttoread:string;
begin
  assignfile(t,DATEINAME);
  reset(t);
  k:=0;
  while not eof(t) do begin
    readln (t, zeile);
    zeile:=zeile+' '; //Leerzeichen anhängen damit am Schluss die letzte Zahl nicht ignoriert wird
    i:=0;
    acttoread:='';
    for j:=1 to length(zeile) do begin
      if zeile[j]=' ' then   //wenn auf Leerzeichen gestoßen, dann aktuelle Zahl zuende -> Zahl ans Array anhängen
      begin
        zahlenarray[k,i]:=floattostr(acttoread);
        inc(i);
        acttoread:='';
      end else
        acttoread:=acttoread+zeile[j];
    end;
    inc(k);
  end;
  closefile(t);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.
Seite 1 von 2  1 2      

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