Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datei öffnen und Werte ausgeben funktioniert nicht (https://www.delphipraxis.net/169994-datei-oeffnen-und-werte-ausgeben-funktioniert-nicht.html)

mat72 24. Aug 2012 15:29

Datei öffnen und Werte ausgeben funktioniert nicht
 
Hi,
ich öffne eine Datei und will nur bestimmte Werte zur weiteren Verwendung nutzen.
Die Datei öffne ich in ein Memofeld, was auch funktioniert. Wenn ich jetzt Werte verwenden möchte, werden diese nicht angezeigt in Editfeldern.
Was mache ich verkehrt?
Vielen Dank für eure Hilfe.
Gruss
Matthias
Delphi-Quellcode:
unit BarBow;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, Grids;

type
  TForm9 = class(TForm)
    Memo1: TMemo;
    Image2: TImage;
    StaticText1: TStaticText;
    MainMenu1: TMainMenu;
    MainMenu2: TMenuItem;
    OPen1: TMenuItem;
    Exit1: TMenuItem;
    Help1: TMenuItem;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Edit4: TEdit;
    procedure Exit1Click(Sender: TObject);
    procedure OPen1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form9: TForm9;
  filename : string;

implementation

{$R *.dfm}

procedure TForm9.Exit1Click(Sender: TObject);
begin
close();
end;

procedure TForm9.FormCreate(Sender: TObject);
begin
//  Memo1.WordWrap := False;
//  Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Kurve.txt');
end;

procedure TForm9.OPen1Click(Sender: TObject); // liest Datei in Memofeld ein
var St,helpstring : string;
    F : TextFile;

begin
if OpenDialog1.Execute then
  begin
    filename:= OpenDialog1.FileName;
    AssignFile(F, OpenDialog1.FileName); // Datei auswählen
    Reset(F);
    while not eof (F) do
      begin
      Readln(F, helpstring); //Erste Zeile der Datei lesen
      St:=St + helpstring;
      Memo1.Text := St; //String in ein Memo schreiben
      end;
    CloseFile(F);
  end;
end;

procedure TForm9.Button1Click(Sender: TObject);
begin
close();
end;

procedure TForm9.Button2Click(Sender: TObject);
var s,s1,s2 : string;
    erstezeile,i,SuchZeile,p : integer;
begin
  ErsteZeile := Memo1.Lines.Count;

  for i:=0 to Memo1.Lines.Count -1 do
    if SameText(Memo1.Lines[i],'data1:') then
    begin
      ErsteZeile:=i+1;
      Edit4.Text:=IntToStr(ErsteZeile);
      Break;
    end;

  SuchZeile:=StrToIntDef(Edit1.Text,1);
  Edit1.Text:=IntToStr(SuchZeile); //Korrigieren wenn Fehler
  SuchZeile:=ErsteZeile+SuchZeile;

  s:=Memo1.Lines[SuchZeile];
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht erstes Tab, d.h. bis vor erste Spalte

  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis ersten Tab, d.h. bis vor zweite Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis zweiten Tab, d.h. bis vor dritte Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis dritten Tab, d.h. bis vor dritte Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis vierten Tab, d.h. bis vor dritte Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis fuenften Tab, d.h. bis vor zweite Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis sechsten Tab, d.h. bis vor dritte Spalte
  p:=Pos(#9,s); // #9 = Tab
  Delete(s,1,p); //löscht bis siebten Tab, d.h. bis vor dritte Spalte
  p:=Pos(#9,s); // #9 = Tab

  s1:=Copy(s,1,p); //kopiert bis achten Tab, d. h. zweite Spalte
  Delete(s,1,p); //löscht bis achten Tab, d.h. bis vor dritte Spalte

  p:=Pos(#9,s); // #9 = Tab
  s2:=Copy(s,1,p); //kopiert bis neunten Tab, d. h. zweite Spalte
  Delete(s,1,p); //löscht bis neunten Tab, d.h. bis vor dritte Spalte

  Edit2.Text:=Trim(s1);
  Edit3.Text:=Trim(s2);
end;

end.

mat72 24. Aug 2012 15:34

AW: Datei öffnen und Werte ausgeben funktioniert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die Datei die geöffnet wird.

DeddyH 24. Aug 2012 15:38

AW: Datei öffnen und Werte ausgeben funktioniert nicht
 
Bist Du Dir sicher, dass das Tabulatoren sind?

himitsu 24. Aug 2012 15:48

AW: Datei öffnen und Werte ausgeben funktioniert nicht
 
Den Debugger kennst du?

Haltepunkt an den Anfang von Button2Click und dann nachsehn, was das Programm macht, bzw. was es nicht so macht, wie du es dir denkst das es machen sollte.

[add]
Abgesehn vom LoadFromFile, was shmia gleich nennt...

Würde es nicht ausreichen dem Memo nur einmal den kompletten Text zu geben, bzw. nicht ständig alles bereits Geladenen immer wieder zu überschreiben?
Delphi-Quellcode:
    Reset(F);
    while not eof (F) do
      begin
      Readln(F, helpstring); //eine Zeile der Datei lesen
      St:=St + helpstring;
      end;
    Memo1.Text := St; //String in ein Memo schreiben
    CloseFile(F);
oder
Delphi-Quellcode:
    Reset(F);
    Memo1.Clear;
    while not eof (F) do
      begin
      Readln(F, helpstring); //eine Zeile der Datei lesen
      Memo1.Lines.Add(helpstring); //Zeile ans Memo anhängen
      end;
    CloseFile(F);
Zitat:

Erste Zeile der Datei lesen
Das Erste ist bestimmt auch falsch :zwinker: und das
Delphi-Quellcode:
d.h. bis vor ... Spalte
stimmt auch irgendwie fast nie.

shmia 24. Aug 2012 15:53

AW: Datei öffnen und Werte ausgeben funktioniert nicht
 
Bitte schickt doch AssignFile, Reset, ReadLn, usw. in Rente!
Zum Laden einer Datei reicht ein 2-Zeiler:
Delphi-Quellcode:
procedure TForm9.OPen1Click(Sender: TObject); // liest Datei in Memofeld ein
begin
  if OpenDialog1.Execute then
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

himitsu 24. Aug 2012 16:34

AW: Datei öffnen und Werte ausgeben funktioniert nicht
 
Ach ja, bezüglich der ganzen Pos und Delete:
Kennt dein Delphi noch kein Delphi-Referenz durchsuchenPosEx?
Wenn nicht, dann siehe PosExPosEx.

Damit mehrmals nach dem nächsten #9 suchen, dann s1 rauskopoieren, nach dem nächsten #9 suchen und s2 rauskopieren, ohne dabei löschen zu müssen.
Abgesehn davon, daß man sich den String auch über ExplodeExplode-Funktionen, bzw. mit Hilfe einer TStringList, an den #9 aufplitten lassen könnte, wobei man mehrere Einzelstrings zurückbekommt und sich dann nur noch den gewünschten String rauszusuchen braucht.



Aber mangels lauffähigem Testprogramm, wirst du den Fehler, beim Füllen der Edits, selber suchen müssen. (Debuggen und nachsehn was ist)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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 by Thomas Breitkreuz