Delphi-PRAXiS

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

devilone 26. Apr 2006 18:44

Re: wie trenne ich textzahlen??
 
hmm wofür hast du das : Items[i] := After(Items[i], 'creature '); deklariert??

da jault der bei mir rum..

marabu 26. Apr 2006 19:02

Re: wie trenne ich textzahlen??
 
Durch diese Zeile in der Schleife wird 'creature ' aus dem section name entfernt, damit nur die Nummer in der ComboBox angezeigt wird.

marabu

devilone 26. Apr 2006 20:00

Re: wie trenne ich textzahlen??
 
ja..ist klar, aber der jault rum das er After nicht kennt..

marabu 26. Apr 2006 20:07

Re: wie trenne ich textzahlen??
 
Bringe es (After) "ihm" doch einfach bei - den Code dafür habe ich dir ja mitgegeben.

marabu

devilone 26. Apr 2006 20:13

Re: wie trenne ich textzahlen??
 
und wie .. ich bin noch nicht so gut in dem ganzen..

Klaus01 26. Apr 2006 20:35

Re: wie trenne ich textzahlen??
 
es sollte eigentlich funktionieren wenn Du den Code
in den Implementation teil der Unit kopierst.
So wie es marabu in seinem Beispiel auch hat.

Grüße
Klaus

marabu 26. Apr 2006 20:46

Re: wie trenne ich textzahlen??
 
Du könntest die Funktion After() aus meinem Beitrag #10 einfach an den Beginn des implementation Abschnitts der Unit kopieren, in der du die Funktion benutzen möchtest.

marabu

devilone 27. Apr 2006 00:01

Re: wie trenne ich textzahlen??
 
ja... danke jetzt hat es geklapt..

wie schaffe ich es jetzt das ich das jetzt 4mal in einer form habe , also in einem fenster..

und daie auch gleichzeitig nutzen kann..

marabu 27. Apr 2006 07:08

Re: wie trenne ich textzahlen??
 
Was willst du denn viermal auf deiner Form haben? Den ValueListEditor? Das wird nicht besonders gut aussehen und ist doch auch garnicht nötig.

marabu

devilone 27. Apr 2006 13:41

Re: wie trenne ich textzahlen??
 
die combobox..aber mit mitverschiedenen daten,weil ich habe volgendes vor

1.laden der datei in die combobox1 und valuelisteditor1 ///erledigt

2.aus der combobox den zahlenwert in ein label1 ausgeben, aus dem valuelisteditor einen eintrag in labeb2 ausgeben ///erledigt

3.label1 über button1.cklick in ein listbox eintragen ////erledigt

so jetzt solten sich 1,2,3 wiederholen, aber mit einer anderen datei, in einer neuen combobox und valuelisteditor.

weil ,ich habe 3 verschiedene datein , 1und2 mit ca. 2,6-14mb und die 3 mit ca. max 40 mb in der datei1 und 2 enthalten sind, aber nicht in dem selben aufbau wie in datei 1 und 2 .
daher brauche ich die werte die ich oben extrahiere aus datei 1 und 2, um aus datei 3 die einträge in eine vierte datei zu exportieren.

in datei 3 sind noch werte drin die ich gerne noch in eine 5 datei extrahieren möchte um dadurch noch einen filter zu generieren, um sie so zu nutzen wie in schritt 1,2,3..

hier mal die aufbauten der dateien
Delphi-Quellcode:

[creature 38]    ///////////////aus datei 1///////////////// suchwert für datei 3  SPAWN=38
name=Defias Thug
flags1=080000
faction=17
level=3..4
money=3..7
attack=1970 2167
bounding_radius=0.312
combat_reach=2.25
damage=4 5
equipmodel=0 7487 2 7 1 13 3 0 0 0
loottemplate=38
maxhealth=89
model=5035
model1=5036
speed=0.92
type=7
maxmana=0


[gameobj 80]      ///////////////aus datei 2/////////////////suchwert für datei 3 ENTRY=80
name=Old Coast Road
type=5
sound1=1
sound0=1
flags=00
loot=4918 99.9365
model=22

[OBJECT]      //////////////////////////aus datei 3 /////////////
GUID=0150AF
TYPE=3
FLAGS=080000000
ENTRY=1
MODEL=262
LEVEL=255
MAP=1
XYZ=3305.462891 -256.660431 125.954506 1.848397
MAXHEALTH=9999
SIZE=0.500000
FACTION=35
SPAWNTIME=180 230
SPAWNDIST=20.000000 25.000000
SPAWN=38 1     


[OBJECT] //////////////////////aus datei 3//////////
GUID=011F77
TYPE=5
ENTRY=80 
MODEL=22
XYZ=-9979.133789 1007.325378 32.758778 0.099154
GTYPE=5
ROTATION=0.100685 -0.025144 0.052291 0.993225
/////////////////////////////////////datei 4 soll so aus sehen/////////////////////////
[an morgen]
map=1

[mittendrin]
map=485

//////////////so das in datei 5 das so aus sieht////////////////////////

[OBJECT]
GUID=0DD000000DD49D915
TYPE=3
LINK=01B5FD
ENTRY=3103
MODEL=1940
LEVEL=5
MAP=1
XYZ=-1451.774902 -5255.200195 -1.923091 4.724797
MAXHEALTH=334
MAXPOWERS=220 0 0 0 0
DAMAGE=0 8.000000 12.000000
DELAY=1910 2101
SPEED=0.530000
SIZE=0.550000
RADIUS=0.191400
REACH=2.190000
FACTION=129
CTYPE=7

[OBJECT]
GUID=011F72
TYPE=5
ENTRY=177365
MODEL=4713
MAP=1
XYZ=-1922.371948 1808.765991 66.760757 -2.426008
GTYPE=10
ROTATION=0.000000 0.000000 0.936672 -0.350207
so das man dann entweder nach z.b Creatur/map/creaturmap.save* erhält.

*die dateien haben im 1und 2 fall die endung .scp und die 3 .save

und was auch noch sein muss ist, das sektionen gezählt werden
Delphi-Quellcode:
[OBJECTS]
total=123023
und das muss in der 6 zeile der datei stehen..

ich weis das wird nicht einfach, aber ist halt ne herausvorderung und ne gute sache zum lernen..

hoffe trotzdessen das ihr mir helft..


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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