AGB  ·  Datenschutz  ·  Impressum  







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

32-stellige zahlen aus txt oder memo auslesen

Ein Thema von o0o · begonnen am 20. Jul 2007 · letzter Beitrag vom 20. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von o0o
o0o

Registriert seit: 20. Jul 2007
Ort: am...,da wo die sonne nicht scheint!
166 Beiträge
 
Delphi 2007 Enterprise
 
#1

32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:18
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:33
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:41
Du gehst jtzt allerdings davon aus, dass sie getrennt Zeilenweise vorhanden sind
Wie wäre es damit? 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;
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:46
Zitat von inherited:
Du gehst jtzt allerdings davon aus, dass sie getrennt Zeilenweise vorhanden sind
Das habe ich aus dem Threadtitel so interpretiert, ja
StrToIntDef mit 32-stelligen Zahlen habe ich noch nie versucht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#5

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:50
Wenn, muss es dann nicht
procedure FilterZahlen32{Das 32 ist irreführend :D} (rein: String; var raus: TStrings); heißen? (Ich meine das "var raus..." sonst legt es doch eine neue Instanz von TStrings an und kopiert den Inhalt, oder?
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 15:58
TSTrings ist eine Klasse, wird also intern nur der Pointer übergeben, weshalb das so klappen müsste.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#7

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 16:00
Aha, wieder was gelernt.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 18:41
Hi,

ich habe aus Interesse eben diese kleine Funktion geschrieben:
Delphi-Quellcode:
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;
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^^
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.
  Mit Zitat antworten Zitat
Benutzerbild von o0o
o0o

Registriert seit: 20. Jul 2007
Ort: am...,da wo die sonne nicht scheint!
166 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 21:14
hi leutz,...ich danke euch vielmals dass ihr euch so die muehe gemacht habt und mir sooo viel text geschrieben habt
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:
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.
thx fuer eure hilfe im vorraus

da o0o
  Mit Zitat antworten Zitat
HalloDu

Registriert seit: 24. Apr 2006
Ort: Oelde
267 Beiträge
 
Delphi 2009 Professional
 
#10

Re: 32-stellige zahlen aus txt oder memo auslesen

  Alt 20. Jul 2007, 21:22
Zitat von o0o:
[Error] Unit1.pas(14): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
Das kommt, weil du im Interface noch eine Defintion von Button1Click hast, aber den nicht in der Implementation implementiert hast. Du musst also entweder Button1Click implementieren oder aus dem Interface-Teil löschen.

Zitat von o0o:
[Error] Unit1.pas(69): Incompatible types: 'String' and 'TStrings'
Der zweite Fehler kommt davon, dass du findnumlength mit den falschen Parameter aufrufst. Die Prozedur erwartet midestens zwei und du hast nur ein TStrings Objekt für den ersten Parameter angegeben, wobei da der input String hingehört, und somit sagt Delphi das du versuchst ein TStrings Objekt in einen String zu quetschen. Die Lösung ist simpel: Gib beide Parameter an. Erst den Input, dann die TStrings (Memo1.Lines).

Hoffe geholfen zu haben.

[EDIT] 1. Zweiten Fehler erkannt 2. Schlusswort verschoben [/EDIT]
Frederic H.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 23:30 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