![]() |
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!!! |
Re: textbestand einlesen mit 2D array...
Zitat:
|
Re: textbestand einlesen mit 2D array...
@student:
Zitat:
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. |
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? |
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 :) |
Re: textbestand einlesen mit 2D array...
Ich persönlich löse das immer über einen Zugriff per Datenbank (Text-Treiber von MS)
![]() Die Datei schema.ini müsste also in diesem Fall wie folgt aussehen (Dateiname mit den Daten hier jetzt mal Daten.txt angenommen:
Code:
Ja und jetzt kann man schon auf die Tabelle zugreifen mit
[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
SQL-Code:
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 ;-) )
select * from Daten.txt
cu |
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; |
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 |
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:
vielen dank nochmal und ein schönes wochenende allerseits....
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. [edit=Christian Seehase]Delphi-Tags gesetzt, bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] |
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:
tdataarray=array[0..7,0..511] of real;
Zitat:
Delphi-Quellcode:
und formatiere deinen Code doch bitte mit Einrückungen.
i,j,k,l:integer;
nur mal als Tipp: probier readln statt read. also jetzt nur mal der wichtige Code wie ich ihn formatieren würde:
Delphi-Quellcode:
und jetzt, da er lesbar ist, die Verbesserung:
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;
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. |
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