AGB  ·  Datenschutz  ·  Impressum  







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

array of array aus textfile

Ein Thema von danieleh · begonnen am 9. Aug 2009 · letzter Beitrag vom 10. Aug 2009
Antwort Antwort
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#1

array of array aus textfile

  Alt 9. Aug 2009, 15:03
Hallo

Gemäss Posting (Beitrag #25)
möchte ich den Inhalt eines tab-getrenntes Textfiles (Datetime, Messwert1, Messwert2, MesswertN) in ein Array (of Double) pipen

Es klappt ganz gut die Werte (der Spalten) in je ein separates Array zu schreiben. Jedoch wäre es eleganter alles in ein einziges zweidimensionales Array zu schreiben.
Und da hab ich einen Knopf. Vielleicht hat jemand eine Idee?
Zusätzlich: wie kann man Null-Werte abfangen (bei yi[i]:= StrToFloat)? "Try ... except ... end" scheint nicht zu funktionieren.

hier meine Prozedur:

Delphi-Quellcode:
procedure TDemoForm.Button2Click(Sender: TObject);
var
    i: integer;
    List1,List2 : TStringList;
    xi,yi : array of double;
    xyi: array of array of double;
    t : TDateTime;
    MySettings: TFormatSettings;
begin
  GetLocaleFormatSettings(GetUserDefaultLCID, MySettings);
  MySettings.DateSeparator := '.';
  MySettings.TimeSeparator := ':';
  MySettings.ShortDateFormat := 'dd.mm.yyyy';
  MySettings.ShortTimeFormat := 'hh:nn:ss';


  List1:=TStringList.Create;
  try
    List1.LoadFromFile('TabSeparated.txt');
    List2:=explode(#9,List1[i]);
   // showmessage(inttostr(List1.Count-1));

    setLength(xi,List1.Count);
    setLength(yi,List1.Count);
    setlength(xyi,List1.Count,List2.Count);

    for i:=0 to List1.Count-1 do
      begin
        List2:=explode(#9,List1[i]);

   ListBox1.Items.Insert(i, List2[0]);
        ListBox2.Items.Insert(i, List2[1]);
        ListBox3.Items.Insert(i, List2[2]);
        ListBox4.Items.Insert(i, List2[3]);

        xi[i]:= StrToDateTime(List2[0], MySettings);
        yi[i]:= StrToFloat(List2[3]);

       // xyi ??

        List2.free;
      end;

  finally
    List1.Free;
  end;

 // showmessage(DateTimeToStr(yi[5])) ;
 // showmessage(floattostr(yi[5])) ;
end;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: array of array aus textfile

  Alt 9. Aug 2009, 15:24
Zitat von danieleh:
Zusätzlich: wie kann man Null-Werte abfangen (bei yi[i]:= StrToFloat)?
TryStrToFloat?

Zitat von danieleh:
"Try ... except ... end" scheint nicht zu funktionieren.
In Delphi werden Exceptions auch mit try..except angezeigt, wenn du es nicht anders einstellst, denn dort geht es ja um Fehlerbehebung.
Wenn du das Programm außerhalb von Delphi startest, werden die Exceptions auch nicht angezeigt in try..except.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#3

Re: array of array aus textfile

  Alt 9. Aug 2009, 17:13
Danke Sebastian für die Null-Werte.

Bleibt noch die Hauptfrage falls jemand weiterhelfen kann.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: array of array aus textfile

  Alt 9. Aug 2009, 17:41
Eigentlich solltest du schon Compilerwarnungen bekommen, an denen du siehst, wo etwas nicht stimmt. Nämlich z.B., dass i in Zeile 20 noch nicht definiert ist. Aber die ignorierst du ja scheinbar...

Jedenfalls explodest du in deiner Schleife durch List1 ja dann die aktuelle Zeile, und dann müsstest du ja nur noch in einer zweiten Schleife diese Spalten durchgehen. Dann hast du Zeile i und Spalte j z.B., also die beiden Schleifenvariablen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#5

Re: array of array aus textfile

  Alt 9. Aug 2009, 18:34
Hallo Sebastian,
Die "einzelnen" Arrays xi und yi ist nur als Test/Beispiel gedacht und funktionieren einwndfrei.

Durch die Funktion Explode (quelle oben beschieben), werden die Spalten bestens getrennt sodass ich sie mit List2[spaltenzahl] lesen kann.

Das Datenfile entält aber n (beliebige Anzahl) Messwerte die ich allesamt in ein 2dArray bringen möchte (nicht nur 2 davon). Ich weiss einfach nicht wie ich sie in das Array bringen kann. Hilfe mit Code würde ich sehr schätzen.

Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringList;
var
  SepLen: Integer;
  F, P: PChar;
  Index: Integer;
begin
  result := TStringList.Create;
  if (S = '') or (Limit < 0) then Exit;
  if Separator = 'then
  begin
    Result.add(S);
    Exit;
  end;
  SepLen := Length(Separator);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then
      P := StrEnd(F);
    result.Add(copy(AnsiString(F),0,P-F));
    inc(index,1);
    if P^ <> #0 then Inc(P, SepLen);
  end;
end;
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#6

Re: array of array aus textfile

  Alt 9. Aug 2009, 18:47
Hallo danieleh,

ich kenne den explode nicht. aber vielleicht hilft dies ja weiter.

Grüße
Greeny
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#7

Re: array of array aus textfile

  Alt 9. Aug 2009, 19:01
Hallo Greeny
Das Explode ist nicht das problem, sondern das erstellen des xyi: array of array of double;

Delphi-Quellcode:
  ...
 var: xyi: array of array of double;
  ...
  List1:=TStringList.Create;
  try
    List1.LoadFromFile('TabSeparated.txt');
    List2:=explode(#9,List1[i]);

    // setLength(xi,List1.Count);
    // setLength(yi,List1.Count);
    setlength(xyi,List1.Count,List2.Count);

    for i:=0 to List1.Count-1 do
      begin
        List2:=explode(#9,List1[i]);

      // xi[i]:= StrToDateTime(List2[0], MySettings); // <- test ok
      // yi[i]:= StrToFloat(List2[3]); // <- test ok

        xyi:= ?? // [b]<-hier das problem. wie machen?[/b]

        List2.free;
      end;
  finally
    List1.Free;
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: array of array aus textfile

  Alt 9. Aug 2009, 19:44
xyi[i, j] := ... Wie gesagt eben mit einer zweiten Schleife durch die Spalten.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

Re: array of array aus textfile

  Alt 9. Aug 2009, 19:45
Delphi-Quellcode:
...
var
  xyi: array of array of double;
...
  List1:=TStringList.Create;
  try
    List1.LoadFromFile('TabSeparated.txt');
    setlength(xyi,List1.Count);

    for i:=0 to List1.Count-1 do begin
      List2:=explode(#9,List1[i]);
      try
        setlength(xyi[i],List2.Count);
        for j:=0 to List2.Count - 1 do
          xyi[i, j] := <wandle-den-string-in-einen-wert-um>(List2[j]);
      finally
        List2.free;
      end;
    end;
  finally
    List1.Free;
  end;
...
Das problem könnten allerdings die unterschiedlichen Interpretationen der einzelnen Spalten sein...
Uwe Raabe
  Mit Zitat antworten Zitat
danieleh

Registriert seit: 1. Dez 2005
54 Beiträge
 
#10

Re: array of array aus textfile

  Alt 10. Aug 2009, 09:09
Super, Danke Alle
passt perfekt. da die erste Spalte immer datetime ist, reicht der folgende code. alle anderen Werte sind float oder integer.

Delphi-Quellcode:
        for j:=0 to List2.Count - 1 do
        begin
          if j=0 then xyi[i, j] := StrToDateTime(List2[j], MySettings)
                 else xyi[i, j] := StrToFloat(List2[j]);
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:00 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