AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi mehrere zahlen aus einen string filtern?
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere zahlen aus einen string filtern?

Ein Thema von Prym · begonnen am 19. Jul 2005 · letzter Beitrag vom 22. Jul 2005
Antwort Antwort
Prym

Registriert seit: 20. Feb 2005
108 Beiträge
 
#1

mehrere zahlen aus einen string filtern?

  Alt 19. Jul 2005, 20:08
also erstmal das string beispiel;
---------------String------------------------------------------
Wort1 (30)
text text texttext text texttext text texttext text
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text


wort2 (26)
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text

wort4 (15)
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text
text text texttext text texttext text texttext text text
----------------String------------------------------------------



so nun möchte ich das die zahl bei wort1(das sind immer sone ar schlüsselwörter also die zahlen stehen immer neben den selben wörtern) in das edit1 feld rein kommt die zahl neben dem wort2 in das 2te edit feld usw

nun wollte ich fragen wie man sowas am besten macht?
Kodex & FAQ :: Index:
2.3.3.1 - Bitte nicht vom Thema abschweifen
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: mehrere zahlen aus einen string filtern?

  Alt 19. Jul 2005, 20:13
Mit Delphi-Referenz durchsuchenPos nach dem ersten Vorkommen einer Klammer suchen, die Zahl in der Klammer auslesen und dann das ganze mit Delphi-Referenz durchsuchenPosEx wiederholen, bis keine Klammern mehr gefunden werden.
Du hast nur ein Problem: Nämlich wenn im Text auch Klammern vorkommen.
Du könntest höchstens überprüfen, ob kurz hinter dem Wort "wort" die Klammer kommt.
Julian J. Pracht
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: mehrere zahlen aus einen string filtern?

  Alt 19. Jul 2005, 20:14
Hallo Prym,

da könnte dir die Funktion ExtractBetween() helfen.

Grüße vom marabu
  Mit Zitat antworten Zitat
100nF

Registriert seit: 7. Nov 2004
639 Beiträge
 
#4

Re: mehrere zahlen aus einen string filtern?

  Alt 19. Jul 2005, 20:37
hallo,

ich hatte grad zeit, darum hab ich mal ein bisschen gecodet...
ich denke es gibt schönere methoden, aber sie muss ja nicht mehr als funktionieren...
hier der code der dabei entstanden ist:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, max: integer; s, text: string;
begin
  text := // der text der durchsucht werden muss
  max := // wieviele edits gibts? oder: wieviele "wortx" gibts?

  s := text;
  for i:=1 to max do
    if pos('wort'+inttostr(i), s) <> 0 then
    begin
      delete(s, 1, pos('wort'+inttostr(i), s)+length('wort'+inttostr(i))+1);
      delete(s, pos(')', s), length(s));
      (findcomponent('Edit'+inttostr(i)) as TEdit).text := s;
      s := text;
    end;
end;
wichtig ist, dass wortx immer klein geschrieben ist. oder falls es gross sein soll musst du alle "wort" im code auch gross schreiben

gruss
urbanbruhin
  Mit Zitat antworten Zitat
Prym

Registriert seit: 20. Feb 2005
108 Beiträge
 
#5

Re: mehrere zahlen aus einen string filtern?

  Alt 22. Jul 2005, 18:13
guten tag ich habe das jetzt anders gelöst aber damit habe ich ein problen was eigentlich nicht sein dürfte

Delphi-Quellcode:
procedure TForm1.Button68Click(Sender: TObject);
var Pla : integer;
geb,fleet,def,StrZahl : string;

i,posWort,posklam : integer;
begin

Pla := Strtointdef(CBPL.Text,0);
if (pla <1) and (pla>9) then
begin
showmessage('Ungültiger Planet');
exit;
end;

 if CBMond.Checked = true then
 begin
  geb:=memogeb.text;
  //fleet:=memofleet.text;
  //def:=memodef.text;
  {----A--------------------Gebäude-----------------------------}
   if geb <>'then
   begin
    ///////////////////////////////////////////////////////
    PosWort:=pos('Roboterfabrik',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mrobf') as TEdit).text :=Strzahl ;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
   ///////////////////////////////////////////
    PosWort:=pos('Raumschiffwerft',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mraumw') as TEdit).text :=Strzahl ;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Metallspeicher',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mmets') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Kristallspeicher',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mkriss') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Deuteriumtank',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mdeuts') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Mondbasis',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mmon') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Sensorphalanx',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<100) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mSen') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
    PosWort:=pos('Sprungtor',geb);
    PosKlam:=pos(')',geb);
    if (PosWort<>0) and ((PosKlam-PosWort)<50) then
    begin
      for i := PosWort to PosKlam do
      begin
       If geb[i] in ['0','1','2','3','4','5','6','7','8','9'] Then
       Strzahl:= StrZahl+geb[i];
      end;
      (findcomponent('edtpl'+inttostr(pla)+'mst') as TEdit).text :=Strzahl;
      delete(geb,(pos(')',geb)),(pos(')',geb))+1);
      Strzahl:='';
    end;
    ///////////////////////////////////////////////////////
   end;
   {----A--------------------Gebäude-----------------------------}
 end;
end;
mein problem es wird alles sehr schön eingelesen bis Sensorphalanx

hir ist der string dazu:
--------------------------------------------------------------------------------------------------
Roboterfabrik (Stufe 2)
Roboterfabriken stellen einfache Arbeitskräfte zur Verfügung, die beim Bau der planetaren Infrastruktur eingesetzt werden können. Jede Stufe erhöht damit die Geschwindigkeit des Ausbaus von Gebäuden.
Benötigt: Metall:1.600 Kristall:480 Deuterium:800
Produktionsdauer: 16m 38s
Ausbau
auf Stufe 3
Raumschiffwerft (Stufe 5)
In der planetaren Werft werden alle Arten von Schiffen und Verteidigungsanlagen gebaut.
Benötigt: Metall:12.800 Kristall:6.400 Deuterium:3.200
Produktionsdauer: 2h 33m 36s
Ausbau
auf Stufe 6
Metallspeicher
Lagerstätte für unbearbeitete Metallerze bevor sie weiter verarbeitet werden.
Benötigt: Metall:2.000 Kristall:0
Produktionsdauer: 16m 00s
bauen
Kristallspeicher
Lagerstätte für unbearbeitetes Kristall bevor es weiter verarbeitet wird.
Benötigt: Metall:2.000 Kristall:1.000
Produktionsdauer: 24m 00s
bauen
Deuteriumtank
Riesige Tanks zur Lagerung des neu gewonnenen Deuteriums.
Benötigt: Metall:2.000 Kristall:2.000
Produktionsdauer: 32m 00s
bauen
Mondbasis (Stufe 4)
Ein Mond verfügt über keinerlei Atmosphäre, deshalb muss vor der Besiedlung eine Mondbasis errichtet werden.
Benötigt: Metall:320.000 Kristall:640.000 Deuterium:320.000
Produktionsdauer: 5 Tage 8h 00m 00s
Ausbau
auf Stufe 5
Sensorphalanx (Stufe 1)
Die Sensorphalanx erlaubt es Flottenbewegungen zu beobachten. Je höher die Ausbaustufe, desto größer die Reichweite der Phalanx.
Benötigt: Metall:40.000 Kristall:80.000 Deuterium:40.000
Produktionsdauer: 16h 00m 00s
----------------------------------------------------------------------------------------------------

könnte einer wissen warum?
Kodex & FAQ :: Index:
2.3.3.1 - Bitte nicht vom Thema abschweifen
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#6

Re: mehrere zahlen aus einen string filtern?

  Alt 22. Jul 2005, 18:14
SScanF() google ist euer freund
  Mit Zitat antworten Zitat
Urmel

Registriert seit: 23. Mai 2004
Ort: Titiwu
28 Beiträge
 
#7

Re: mehrere zahlen aus einen string filtern?

  Alt 22. Jul 2005, 18:16
Zitat von barf00s:
SScanF() google ist euer freund
Kannst Du auch mal vernünftige Antworten geben?
Wenn nein -> .....
Urmel aus dem Eis
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:25 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