Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wie trenne ich textzahlen?? (https://www.delphipraxis.net/68210-wie-trenne-ich-textzahlen.html)

devilone 26. Apr 2006 12:08


wie trenne ich textzahlen??
 
hallo erstmal

habe folgendes problem..

ich habe eine datei, die einen ini änlichen aufbau hat
Delphi-Quellcode:
[creature 0]
name=Spawn Point (Only GM can see it)
faction=35
level=255
money=-1
attack=2000 2200
bounding_radius=1.5
combat_reach=2.25
damage=0 2
maxhealth=56
model=262
size=0.5
type=1
maxmana=0
.............................

[creature 5655765767]
name=Einstiegspunkt
faction=35
level=255
money=-1
attack=2000 2200
bounding_radius=1.5
combat_reach=2.25
damage=0 2
maxhealth=56
model=262
size=0.5
type=1
maxmana=0
diese datei lass ich mir in einer combobox und in einem valuelisteditor ausgeben .
Und zwar so das die secktion in der combobox aufgelistet wir und die secktionsschlüssel in dem valuelisteditor.

jetzt möchte ich aber das ich die zahle/n( [creatur 0] ),in z.b. einem Label oder so ausgegeben werden ohne das Creatur davor....

wie mache ich das am besten??

würde mich über hilfe freuen

Mavarik 26. Apr 2006 12:11

Re: wie trenne ich textzahlen??
 
hmm

delete(S,1,length('[creature ')); ???
s := copy(S,1,pred(Pos(']',S)));

So?

himitsu 26. Apr 2006 12:14

Re: wie trenne ich textzahlen??
 
da gibt es erstmal POS, dann moch POSEX und COPY würde dir eventuell auch noch helfen ^^
- leerzeichen zuchen, oder was auch immer (halt das Zeichen vor der Zahl, oder auch das erste Zeichen der zahl suchen)
- ']' suchen
- und per copy den Teil dazwischen kopieren

[add]
Roter Kasten, wo bleibst du?

@Mavarik: eine Stringoperation reicht zu - wozu 2 (Delete+Copy), wenn copy vollkommen ausreichend ist

Mavarik 26. Apr 2006 12:22

Re: wie trenne ich textzahlen??
 
Zitat:

Zitat von himitsu
@Mavarik: eine Stringoperation reicht zu - wozu 2 (Delete+Copy), wenn copy vollkommen ausreichend ist

Klar gibt es 100 Möglichkeiten.

Dadurch das Copy(S,1 ist aber Pos immer richtig, sonst müsste man beim 2. Pos wieder die Startpos abziehen...

2. Wonach willst Du suchen für den Anfang der Zahl? Nach ' '?

Es könne aber auch eine Bezeichnung mit [New Creature 2938] geben....

Oder so . Blub bla red raus....

Frank

devilone 26. Apr 2006 13:59

Re: wie trenne ich textzahlen??
 
ja das sieht schon gut aus ..:-)

aber jetzt ist mein valuelisteditor leer.. und das soll nicht sein..wo ist den hier mein fehler...
Delphi-Quellcode:
procedure analysiere(datei:string);
begin
sl:=tstringlist.Create;
sl.LoadFromFile('creatures.scp');
sl.SaveToFile(extractfilepath(paramstr(0))+'Creatures.scp.temp');
for i:=0 to sl.Count-1 do
  begin
  s:=sl.Strings[i];
  if (s <> '') and (s[1] = '[') and (s[Length(s)] = ']') then
    begin
     delete(s,1,1);
     delete(s,length(s),1);
      delete(s,1,length('[creature'));
     s:=copy(s,pred(pos(']',s)));
     vvvv.combobox1.Items.Add(s);
      end;
  end;
end;


procedure sectionlesen(section:string);
begin
sl:=tstringlist.Create;
ini.ReadSection(section,sl);
for i:=0 to sl.Count-1 do
  begin
  tLabel.ClassName;
  vvvv.ValueListEditor1.InsertRow(sl[i],ini.ReadString(section,sl[i],''),true);
  end;

end;

procedure Tvvvv.ComboBox1Change(Sender: TObject);
begin
if Valuelisteditor1.RowCount >= 1 then
  begin
    valuelisteditor1.Strings.Clear;
      begin
      sectionlesen(combobox1.Items[combobox1.itemindex]);
           end;
       label1.Caption:=valuelisteditor1.Values['name'];
       label2.Caption:=combobox1.Text;
           end;
  end;
...

ich versteh das irgend wie nicht warum die liste jetzt leer ist..

Mavarik 26. Apr 2006 14:07

Re: wie trenne ich textzahlen??
 
Zitat:

Zitat von devilone
ja das sieht schon gut aus ..:-)

aber jetzt ist mein valuelisteditor leer.. und das soll nicht sein..wo ist den hier mein fehler...
Delphi-Quellcode:
...
  if (s <> '') and (s[1] = '[') and (s[Length(s)] = ']') then
    begin
     delete(s,1,1); // Auch doppelt, hier ist schon die [ weg
     delete(s,length(s),1); // Hier ist schon die ] weg
      delete(s,1,length('[creature')); // hier muss noch ein space mahr dran
     s:=copy(s,pred(pos(']',s))); // also ist Pos = 0
     vvvv.combobox1.Items.Add(s);
...
...

ich versteh das irgend wie nicht warum die liste jetzt leer ist..

Deswegen... siehe oben!

PS.: length('[creature ') kannst Du natürlich gegen 10 ersetzen...
Dachte du würdest da einen String angeben und keine Konstante

devilone 26. Apr 2006 15:33

Re: wie trenne ich textzahlen??
 
hmm irgendwie bin ich da zu duselig zu.. die liste bleibt immer noch leer..

ich habe hir doch die bedingung..
Delphi-Quellcode:
procedure analysiere(datei:string);
begin
sl:=tstringlist.Create;
sl.LoadFromFile('creatures.scp');
sl.SaveToFile(extractfilepath(paramstr(0))+'Creatures.scp.temp');
for i:=0 to sl.Count-1 do
  begin
  s:=sl.Strings[i];
  [b]if (s <> '') and (s[1] = '[') and (s[Length(s)] = ']') then[/b]
    begin
     delete(s,1,1);
     delete(s,length(s),1);
      delete(s,1,length('[creature'));
     s:=copy(s,pred(pos(']',s)));
     vvvv.combobox1.Items.Add(s);
      end;
  end;
end;
wie sage ich ihm das jetzt das er nur das Creatur aus der [Creatur 8767] entfernt, weil die [ ] nimt er ja weg..aber den rest gerade auch..

i am not perfect..ich bin ein mensch...

Mavarik 26. Apr 2006 15:37

Re: wie trenne ich textzahlen??
 
Zitat:

Zitat von devilone
hmm irgendwie bin ich da zu duselig zu.. die liste bleibt immer noch leer..

ich habe hir doch die bedingung..
Delphi-Quellcode:
procedure analysiere(datei:string);
begin
sl:=tstringlist.Create;
sl.LoadFromFile('creatures.scp');
sl.SaveToFile(extractfilepath(paramstr(0))+'Creatures.scp.temp');
for i:=0 to sl.Count-1 do
  begin
  s:=sl.Strings[i];
  [b]if (s <> '') and (s[1] = '[') and (s[Length(s)] = ']') then[/b]
    begin
     delete(s,1,1);
     delete(s,length(s),1);
      delete(s,1,length('[creature'));
     s:=copy(s,pred(pos(']',s))); // <---- die ] ist doch weg!!!! Also ist POS 0!!!
     vvvv.combobox1.Items.Add(s);
      end;
  end;
end;
wie sage ich ihm das jetzt das er nur das Creatur aus der [Creatur 8767] entfernt, weil die [ ] nimt er ja weg..aber den rest gerade auch..

i am not perfect..ich bin ein mensch...


devilone 26. Apr 2006 15:50

Re: wie trenne ich textzahlen??
 
ja..in der combobox ist das ja auch richtig..

er zählt nur noch die nummern auf , aber der valuelisteditor bleibt leer..
und das ist mein problem jetzt, da ich ja den inhalt für den valuelisteditor aus der combobox auslese..
und den inhalt des valuelisteditors in label ausgebe.. siehe zweiten post..

marabu 26. Apr 2006 18:17

Re: wie trenne ich textzahlen??
 
Hallo Teufel #1,

wenn du anstelle von TIniFile TMemIniFile verwendest, geht alles schneller und die Datei darf auch größer werden.

Delphi-Quellcode:
type
  TDemoForm = class(TForm)
    ActionPanel: TPanel;
    StatusBar: TStatusBar;
    Button: TButton;
    ValueListEditor: TValueListEditor;
    ComboBox: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
    procedure ComboBoxChange(Sender: TObject);
  private
    mif: TMemIniFile;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

uses
  StrUtils;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  mif := TMemIniFile.Create('c:\daten\dp\creatures.ini');
end;

procedure TDemoForm.FormDestroy(Sender: TObject);
begin
  mif.Free;
end;

function After(const S, Pattern: String): String;
var
  i: Integer;
begin
  i := Pos(Pattern, S);
  if i = 0
    then Result := ''
    else Result := Copy(S, i + Length(Pattern), Length(S));
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  s: TStrings;
  i: Integer;
begin
  with ComboBox do
  begin
    mif.ReadSections(Items);
    for i := 0 to Pred(Items.Count) do
      Items[i] := After(Items[i], 'creature ');
  end;
end;

procedure TDemoForm.ComboBoxChange(Sender: TObject);
begin
  mif.ReadSectionValues('creature ' + ComboBox.Text,
    ValueListEditor.Strings);
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.
Seite 1 von 2  1 2      

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