![]() |
32-stellige zahlen aus txt oder memo auslesen
hi leutz,...hoffe ich hab das in der richtigen kategorie^^
also ich will ein simples programm schreibn das aus einem mischmasch aus zahlen und buchstaben nur die 32-stelligen zahlen rausfiltert und diese speichert. nur ich bin ein anfaenger und weiss echt nicht wie ich das hinbekommen soll:) hoffe ihr koennt mir da weiterhelfen,... thx im vorraus...o0o :cyclops: |
Re: 32-stellige zahlen aus txt oder memo auslesen
Willkommen in der DP.
Hab mal schnell was zurechtgeschustert, das kann man sicher noch optimieren.
Delphi-Quellcode:
procedure FilterZahlen(ein,aus: TStrings);
var i,j: integer; passt: Boolean; zeile: string; begin aus.BeginUpdate; aus.Clear; for i := 0 to ein.Count - 1 do begin zeile := trim(ein[i]); passt := Length(zeile) = 32; if passt then for j := 1 to Length(zeile) do if not (zeile[j] in ['0'..'9']) then begin passt := false; break; end; if passt then aus.Add(zeile); end; aus.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); begin FilterZahlen(Memo1.Lines,Memo2.Lines); end; |
Re: 32-stellige zahlen aus txt oder memo auslesen
Du gehst jtzt allerdings davon aus, dass sie getrennt Zeilenweise vorhanden sind :)
Wie wäre es damit? :mrgreen: Ungetested hingepfuscht. Ich benutze hier StrToIntDef, ich weiß allerdings nicht ob es schneller/sauberer ist, alle 32 Stellen auf 0..9 zu testen.
Delphi-Quellcode:
procedure FilterZahlen32{Das 32 ist irreführend :D} (rein: String; raus: TStrings);
var i: Integer; begin raus.BeginUpdate; raus.clear; for i := 1 to length(rein) do begin s:=Copy(rein,i,32); if StrToIntDef(s,42)<>42 then raus.Add(s); end; raus.EndUpdate; end; |
Re: 32-stellige zahlen aus txt oder memo auslesen
Zitat:
StrToIntDef mit 32-stelligen Zahlen habe ich noch nie versucht. |
Re: 32-stellige zahlen aus txt oder memo auslesen
Wenn, muss es dann nicht
Delphi-Quellcode:
heißen? (Ich meine das "var raus..." sonst legt es doch eine neue Instanz von TStrings an und kopiert den Inhalt, oder?
procedure FilterZahlen32{Das 32 ist irreführend :D} (rein: String; var raus: TStrings);
|
Re: 32-stellige zahlen aus txt oder memo auslesen
TSTrings ist eine Klasse, wird also intern nur der Pointer übergeben, weshalb das so klappen müsste.
|
Re: 32-stellige zahlen aus txt oder memo auslesen
Aha, wieder was gelernt. :corky:
|
Re: 32-stellige zahlen aus txt oder memo auslesen
Hi,
ich habe aus Interesse eben diese kleine Funktion geschrieben:
Delphi-Quellcode:
Sie findet alle Zahlen mit x Stellen im "input"-String und gibt sie in "output" aus. Bei meinen Tests hat sie jedenfalls funktioniert. Wenn eine Zahl mehr Stellen als x Stellen hat, werden die ersten x Stellen gefunden. Ich hoffe man versteht den Satz trotz der ganzen Ixxe^^
procedure findnumlength(input: string; output: TStrings; numlength: integer=32);
var i,j: integer; inputlen: integer; begin inputlen := length(input); i := 1; while i <= inputlen do begin // die nächsten 32 Stellen prüfen j := 0; while (i+j<=inputlen) and (input[j+i] in ['0'..'9']) and (j<numlength) do inc(j); // Wenn alle 32 Stellen eine Ziffer waren, Zahl hinzufügen if j = numlength then begin output.Add(copy(input,i,numlength)); end; // Vorspulen bis zur nächsten Zahl: while (not (input[i+j] in ['0'..'9'])) and (i+j<=inputlen) do inc(j); // zur nächstmöglichen Stelle Springen inc(i,j); end; end; Wenn die Stellenanzahl genau stimmen muss, also danach keine weiteren Zifefrn folgen müsste es wahrscheinlich reichen, bei "while (i+j<=inputlen) and (input[j+i] in ['0'..'9']) and (j<numlength) do" das " and (j<numlength)" wegzulassen. |
Re: 32-stellige zahlen aus txt oder memo auslesen
hi leutz,...ich danke euch vielmals dass ihr euch so die muehe gemacht habt und mir sooo viel text geschrieben habt :mrgreen:
haette nicht gedacht dass ich so viele antworten bekomme^^ naja ok ich geh mal schwer davon aus dass eure codeschnipsel keine fehler beinhalten und dass das problem an mir liegt dass ich es immer noch nicht gebacken bekomme... ich habe jetzt einfach mal den schnipsel von NamenLozer genommen und versucht einzubauen,... aber ich bekomme es einfach nicht hin._. ich bin einfach mal hingegangen und hab ne datei namens D.txt erstellt mit ein wenig text drinne und diese als string geladen um NamenLozers schnipsel benutzen zu koennen(weiss leider nich wie ichs anders machen koennte...) nur wenn ich das ergebniss der suche per memo ausgeben will bekomme ich einen error: [Error] Unit1.pas(69): Incompatible types: 'String' and 'TStrings' [Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.Button1Click' [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' habt ihr vllcht ne idee wie man es richtig macht?^^ hier mein jetziger source:
Delphi-Quellcode:
thx fuer eure hilfe im vorraus :roll:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure LoadStringFromFile(Filename: string; var LoadString: string);//Datei im string laden var fs:TFileStream; begin fs:=TFileStream.Create(('C:\D.txt'), fmOpenRead or fmShareDenyNone); SetLength(LoadString, fs.Size); if fs.size>0 then fs.Read(LoadString[1], fs.Size); fs.Free; end; procedure findnumlength(input: string; output: TStrings; numlength: integer=32);//NamenLozers schnipsel var i,j: integer; inputlen: integer; begin inputlen := length(input); i := 1; while i <= inputlen do begin // die nächsten 32 Stellen prüfen j := 0; while (i+j<=inputlen) and (input[j+i] in ['0'..'9']) and (j<numlength) do inc(j); // Wenn alle 32 Stellen eine Ziffer waren, Zahl hinzufügen if j = numlength then begin output.Add(copy(input,i,numlength)); end; // Vorspulen bis zur nächsten Zahl: while (not (input[i+j] in ['0'..'9'])) and (i+j<=inputlen) do inc(j); // zur nächstmöglichen Stelle Springen inc(i,j); end; end; procedure TForm1.Button2Click(Sender: TObject);//gewuenschte memo ausgabe begin findnumlength(Memo1.Lines); end; end. da o0o |
Re: 32-stellige zahlen aus txt oder memo auslesen
Zitat:
Zitat:
Hoffe geholfen zu haben. [EDIT] 1. Zweiten Fehler erkannt 2. Schlusswort verschoben [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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