![]() |
Stringliste auf Memo ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, versuche erneut mein Glück. Hatte schon mal das Thema eingestellt, hat mir auch größtenteils geholfen, sind aber immer noch en paar Problemchen vorhanden!
Zum Problem: Hab ne Textdatei , z.B.:
Code:
(benutze hier zum Testen einfach en Edit Fenster zur eingabe). Ich will nur die Zahlen, hier: 9.8457 und 95904 rausfiltern und in eine Stringliste ablegen. Nun will ich zum Schluß die Stringliste, d.h. alle Zahlenwerte auf einem Memo ausgeben(soll dann so aussehen):
9.8457 95904 abds usw.
Code:
Bei mir schreibt der immer nur die erste Zahl ins Memo! Versteh nicht warum die Schleife net bis zum Ende des Strings durchläuft? :gruebel:
v1=9.8457
v2=95904 v3= .... Hier mal den Code der bis jetzt steht:
Delphi-Quellcode:
Hoffe ihr könnt mir mal wieder aus der Scheiße helfen!
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button6: TButton; Button7: TButton; Edit1: TEdit; procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure StrToMemo(s: string); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} var pos : integer; sl: TStringList; //v1,v2 : string; var zahl: boolean; zahlstart, zahllength: integer; zahlstring: string; procedure TForm1.Button6Click(Sender: TObject); begin Close end; procedure TForm1.StrToMemo(s: string); var i : integer; begin sl:=TStringList.Create; //sl.LoadFromFile('C:\Dokumente und Einstellungen\Tommy\Desktop\Delphi2'); //s:='0.001 abc 1.45'; //zum Testen zahl:=false; for i:=1 to length(s) do begin //wenn Position nicht feststeht if (ord(s[i])>=48) and (ord(s[i])<=57) and (not zahl) then begin zahl:=true; zahlstart:=i; end; if zahl then begin if (s[i]<>'.') then begin if (ord(s[i])<48) or (ord(s[i])>57) then begin zahl:=false; zahllength:=i-zahlstart; zahlstring:=copy(s,zahlstart,zahllength); pos:=sl.Add(zahlstring); end; end; end; end; (*v1:='v1='+copy(s,1,5); //bei fester(bekannter) Position pos:=sl.Add(v1); v2:='v2='+copy(s,15,18); pos:=sl.Add(v2); *) Memo1.Lines.AddStrings(sl) end; procedure TForm1.Button7Click(Sender: TObject); // Stringliste >> Memofeld begin StrToMemo(Edit1.Text) end; end. P.S.: hab auch mal die ganze Datei hier angehängt, zum schnellen ausprobieren! |
Re: Stringliste auf Memo ausgeben
Setz mal ein paar Haltepunkte und schau jeweils, welchen Wert die Eigenschaft Text der Stringliste hat.
|
Re: Stringliste auf Memo ausgeben
|
Re: Stringliste auf Memo ausgeben
Die letzte Zahl wird nicht beachtet, weil das letzte Zeichen des Strings noch zur Zahl gehört und die Ausgabe nur erfolgt, wenn nach der Zahl ein nicht-numerisches Zeichen gefunden wird.
Prüf, ob zahl=true ist, nachdem die Schleife durchgelaufen ist, dann kannste die letzte Zahl noch kopieren. Gruß Stephan :dance: :xmas: |
Re: Stringliste auf Memo ausgeben
Un wie kann ich jetz die Werte in der Stringliste jeweils einer Variable zuordnen, wie schon erwähnt:
Code:
sollte ungefähr so auf Memo ausgegeben werden!
v1=9.8457
v2=95904 usw.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 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