![]() |
Delphi-Version: 7
Aus Datei nur 2 Spalten einlesen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich will aus einer Datei (Aufbau immer gleich) nur 2 Spalten einlesen. Die Zahlen aus diesen Spalten benoetige ich fuer weitere Berechnungen. Wie kann ich es anstellen, dass ich nur die 2 Spalten einlese? In meinem Programm, lese ich die gesamte Datei ein.
Delphi-Quellcode:
Hier noch die Datei. Aus der Datei, brauche ich die Spalten Mx My.
unit Kurve;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, jpeg, ExtCtrls, Math, ExtDlgs; type TForm9 = class(TForm) Image1: TImage; Label1: TLabel; Button1: TButton; MainMenu1: TMainMenu; MainMenu2: TMenuItem; Exit1: TMenuItem; Help1: TMenuItem; Open1: TMenuItem; OpenDialog1: TOpenDialog; Edit1: TEdit; StaticText1: TStaticText; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure Open1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form9: TForm9; filename : string; implementation {$R *.dfm} procedure TForm9.Button1Click(Sender: TObject); begin close(); end; procedure TForm9.Exit1Click(Sender: TObject); begin close(); end; // liest Datei in Memofeld ein procedure TForm9.Open1Click(Sender: TObject); var S,helpstring : string; F : TextFile; begin if OpenDialog1.Execute then filename:= OpenDialog1.FileName; AssignFile(F, OpenDialog1.FileName); // Datei ausgewählen Reset(F); while not eof (F) do begin Readln(F, helpstring); //Erste Zeile der Datei lesen S:=S + helpstring; Memo1.Text := S; //String in ein Memo schreiben end; CloseFile(F); end; end. Danke fuer eure Hilfe. |
AW: Aus Datei nur 2 Spalten einlesen?
Nur so als Tip: Die Eigenschaft TMemo.Lines hat eine Methode LoadFromFile.
Ich würde das wohl mit Delimiter der Klasse TStringList (oder war's TStrings?) angehen. Im dümmsten Fall geht es immernoch, alle Strings der Liste mit einer Schleife durchzugehen und beim zweiten Leerzeichen (oder Tab) aufzuhören zu lesen. Ergänzung: Deine if-Bedingung in der Methode TForm9.Open1Click ist unvollständig, es fehlt ein
Delphi-Quellcode:
nach dem OpenDialog1.Execute, was dazu führt, dass alle Anweisungen auch ausgeführt werden, wenn der Dialog abgebrochen wird. Die Variable filename ist, so wie sie da steht, überflüssig (deklariert, Wert zugewiesen, aber nie benutzt).
begin
MfG Dalai |
AW: Aus Datei nur 2 Spalten einlesen?
Erste Frage: Warum? Die Datei ist klein die die gesuchten Werte liegen nah beieinander. Hier wird imho geschwindigkeitsmäßig nicht viel zu machen sein.
Zweiten Frage: Die Felder scheinen mit Leerzeichen immer gleich groß zu sein, ist das garantiert? |
AW: Aus Datei nur 2 Spalten einlesen?
Liste der Anhänge anzeigen (Anzahl: 1)
Memo ist für sowas schlecht, denn Memo hat WordWrap. Also entweder da auf False setzten oder ListBox nehmen.
Wären die Ergebnisse nur mit Komma, Semikolon oder Tab getrennt, wäre es einfacher, aber bei dir ist es ein Mix. Ist aber auch nicht so wild: Beispiel im Anhang!
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Memo1.WordWrap := False; Memo1.Lines.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Kurve.txt'); end; procedure TForm1.Button1Click(Sender: TObject); var i, p: Integer; ErsteZeile, SuchZeile: Integer; s, s1, s2: String; begin //Erste brauchbare Zeile suchen ErsteZeile := Memo1.Lines.Count; for i := 0 to Memo1.Lines.Count - 1 do if SameText(Memo1.Lines[i], 'data1:') then begin ErsteZeile := i + 1; Break; end; //Suchzeichen aus Editfeld lesen SuchZeile := StrToIntDef(Edit1.Text, 1); Edit1.Text := IntToStr(SuchZeile); //Korrigieren wenn Fehler SuchZeile := ErsteZeile + SuchZeile; //Spalten extrahieren (für Beispiel immer nur eine Zeile) 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 s1 := Copy(s, 1, p); //kopiert bis zweites Tab, d. h. erste Spalte Delete(s, 1, p); //löscht bis zweites Tab, d.h. bis vor zweite Spalte p := Pos(#9, s); // #9 = Tab s2 := Copy(s, 1, p); //kopiert bis drittes Tab, d. h. zweite Spalte //Delete(s, 1, p); //löscht bis drittes Tab, d.h. bis vor dritte Spalte Edit2.Text := Trim(s1); Edit3.Text := Trim(s2); //Fertig end; |
AW: Aus Datei nur 2 Spalten einlesen?
Neben
![]() ![]() Zitat:
Am Tab auftrennen und dann mit Trim die Leerzeichen entfernen. Pos, PosEx, Copy, Explode, die TStringList uvm. Da gibt es Vieles, was man nutzen könnte. |
AW: Aus Datei nur 2 Spalten einlesen?
Zitat:
Aber es scheint ja eher um das Zerlegen der Zeile zu gehen: Zitat:
Mit den festen Anfängen könnte man die Werte auch einfach mit copy (oder manuell) herauskopieren, aber das Teilen an den Tabs ist wohl sicherer. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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