AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

textbestand einlesen mit 2D array...

Ein Thema von student · begonnen am 27. Jan 2006 · letzter Beitrag vom 28. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
student

Registriert seit: 27. Jan 2006
2 Beiträge
 
#1

textbestand einlesen mit 2D array...

  Alt 27. Jan 2006, 21:59
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 )!!! wir müssen dabei mit einem 2-dimensionalen array arbeiten....

vielen vieln dank im voraus für die hilfe!!!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: textbestand einlesen mit 2D array...

  Alt 27. Jan 2006, 22:01
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 )!!!
Dann wäre der bisherige Code nicht schlecht .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: textbestand einlesen mit 2D array...

  Alt 27. Jan 2006, 22:06
@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.
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 00:39
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?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von edosoft
edosoft

Registriert seit: 27. Okt 2003
Ort: Wehingen
258 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 01:16
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
Dominik Weber
www.edo-soft.com
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 02:40
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
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#7

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 07:56
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;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 10:43
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
student

Registriert seit: 27. Jan 2006
2 Beiträge
 
#9

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 12:39
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]
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#10

Re: textbestand einlesen mit 2D array...

  Alt 28. Jan 2006, 12:54
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: tdataarray=array[0..7,0..511] of real;
Zitat:
Delphi-Quellcode:
j: integer;
i:integer;
k:integer;
l:integer;
viel kürzer:
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;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz