Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String zerlegen (https://www.delphipraxis.net/90223-string-zerlegen.html)

DenSchub 13. Apr 2007 14:23


String zerlegen
 
hoi.

ich hab schon gesucht, aber nichts gefunden.
Mein Problem:
Ich habe eine Stringlist z.b.
Code:
Hallo:Danke
Wie_geht_es_dir:gut
mir_auch:schön
usw...
Ich habe ein TValueListEditor und möchte die in Links und Rechts einordnen.
Wie kann ich das machen?

Klaus01 13. Apr 2007 14:28

Re: String zerlegen
 
Hast Du die Möglickeit die : durch = zu ersetzen.
Dann sollte es mit dem ValueListEditor auch kein Problem geben,
der erwartet String so key=value.

Grüße
Klaus

TeronG 13. Apr 2007 14:28

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
ich hab schon gesucht, aber nichts gefunden.

ach ... nagut .. dabei helfen dir bestimmt die üblichen verdächtigen bei Stringoperationen

Pos, posex, copy, ...
und evtl. hat die list sogar noch nen Delimiter (Trennzeichen) dann fluppt alles "von selbst" ^^

DenSchub 13. Apr 2007 14:30

Re: String zerlegen
 
klaus: nein, die möglichkeit habe ich nicht, da es ein .htpasswd-editor werden soll ;)
teronG: geht es vllt etwas genauer?

dennis

Matze 13. Apr 2007 14:32

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
klaus: nein, die möglichkeit habe ich nicht, da es ein .htpasswd-editor werden soll ;)

Du kannst das doch trotzdem machen. Du liest die htaccess ein und weist dem ValueListEditor den String nach dem Ersetzen zu und umgekehrt. Oder habe ich was falsch verstanden? :gruebel:

Der_Unwissende 13. Apr 2007 14:32

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
ich hab schon gesucht, aber nichts gefunden.

Wonach hast Du bitte gesucht?!

Hier im Forum suchenStrings teilen oder Hier im Forum suchenStrings trennen waren die ersten beiden Begriffe, die ich mal getestet habe, findet man Lösungen. Jetzt rein subjektiv muss ich sagen, dass es mir nicht nach all zu viel Mühe beim Suchen vorkommt.

Gruß Der Unwissende

[Edit]
Kurz die Suche verwendet und natürlich gab es keinen roten Kasten, nicht einen einzigen!
[/Edit]

EDatabaseError 13. Apr 2007 14:33

Re: String zerlegen
 
Mal zurück zur Frage...

explodeexplode

Mfg

DenSchub 13. Apr 2007 14:33

Re: String zerlegen
 
Hmmm. Matze, da haste recht.
Ich müsste nur wissen, wie man ein zeichen ersetzt *mal such*

dennis

EDatabaseError 13. Apr 2007 14:34

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
Hmmm. Matze, da haste recht.
Ich müsste nur wissen, wie man ein zeichen ersetzt *mal such*

dennis

Hier im Forum suchenStringReplace ;-)

himitsu 13. Apr 2007 14:35

Re: String zerlegen
 
also bei 'ner TStringList kannst du den Seperator festlegen (standardmäßig ist der ja "=" ... aber ein ":" wäre genauso möglich)
und dannach kannst du dann ganz einfach die Datei mit LoadFormFile auslesen.

TValueList ... nutzt die intern auch TStringList/TStrings?
wenn, dann könnte man ja versuchen dieser auch gleich ":" als Seperator beizubringen.

TeronG 13. Apr 2007 14:39

Re: String zerlegen
 
Ich kenne TValueListEditor nicht auswendig aber evtl. kann man da den/einen Delimeter einstellen dann würde er alles von selbst Trennen.

Notfalls musst du hald die Zeilen in 2 Strings zerlegen.
Mit Pos die Position des ':' suchen und dann mit Copy den teil davor bzw. danach in ne neue Variabel (bzw direkt ins Zielfeld) copieren.

Es geht natürlich auch sowas wie:
blub1 := Copy(orgString,1,Pos(':',orgString)-1);

Achtung nur ausm Kopf geschrieben .. hab grad ken Delphi zu testen/korigieren ^^

DenSchub 13. Apr 2007 14:44

Re: String zerlegen
 
wenn ich mit
valueeditor.Strings.Delimiter := ':';
dem edit das trennzeichen beibringen will, passiert nicht...

dennis

himitsu 13. Apr 2007 14:47

Re: String zerlegen
 
Also wenn es überhaupt funktioniert, dann mußt du das vorm einfügen er Daten in die Liste machen.

nicht das du es im Nachhinein versuchst.

Delphi-Quellcode:
valueeditor.Strings.Delimiter := ':';
valueeditor.Strings.LoadFormile(...

DenSchub 13. Apr 2007 14:50

Re: String zerlegen
 
jaja, das ist mir bewusst, aber ich leg das schon am anfang fest...

ich hab das erstmal mit ner memo gemacht:
Delphi-Quellcode:
  valueedit.Strings.Delimiter := ':';
  valueedit.Strings := memo1.Lines;
aber es will nicht

Klaus01 13. Apr 2007 14:52

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
wenn ich mit
valueeditor.Strings.Delimiter := ':';
dem edit das trennzeichen beibringen will, passiert nicht...

dennis

Na, so weit ich bisher die Delphi Hilfe verstanden habe braucht es zwingend das = Zeichen.

Aber ich stelle mir das ungefähr so vor:
Delphi-Quellcode:
sl := TStringList.create

//laden
sl.loadfromFile(htaccess);
for i:= 0 to sl.count -1 do
  StringReplace(sl[i],':','=',[rfReplaceAll]);

ValueListEditor1.strings.assign(sl);

//speichern

sl.assign(ValueListEditor1.strings);
for i:=0 to sl.count -1 do
  StringReplace(sl[i],'=',':',[rfReplaceAll]);
sl.savetoFile(htaccess);

sl.free;
Grüße
Klaus

marabu 13. Apr 2007 16:04

Re: String zerlegen
 
Hallo,

bei mir würde das so funktionieren:

Delphi-Quellcode:
var
  fn: TFileName;

begin
  // ...
  with ValueListEditor.Strings do
  begin
    NameValueSeparator := ':';
    LoadFromFile(fn);
  end;
end;
Freundliche Grüße

Klaus01 13. Apr 2007 16:21

Re: String zerlegen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
Hallo,

bei mir würde das so funktionieren:

Delphi-Quellcode:
var
  fn: TFileName;

begin
  // ...
  with ValueListEditor.Strings do
  begin
    NameValueSeparator := ':';
    LoadFromFile(fn);
  end;
end;
Freundliche Grüße

Hallo Achim,

zu meiner Ehrenrettung, die Eigenschaft NameValueSeparator gibt es in Delphi 6 noch nicht.
Da Dennis aber D7 hat - sollte es so bei ihm gehen - gut für ihn.

Grüße
Klaus

r2c2 13. Apr 2007 16:44

Re: String zerlegen
 
Mal abgesehen vom konkreten Problem, hier n Tutorial zum Thema: http://r2c2.weingut-rehn.de/content3...mit_Delphi.htm

mfg

Christian

DenSchub 14. Apr 2007 10:17

Re: String zerlegen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
Hallo,

bei mir würde das so funktionieren:

Delphi-Quellcode:
var
  fn: TFileName;

begin
  // ...
  with ValueListEditor.Strings do
  begin
    NameValueSeparator := ':';
    LoadFromFile(fn);
  end;
end;
Freundliche Grüße

Schau dir mal den Schreenshot an :wall:

Dennis

xZise 14. Apr 2007 10:24

Re: String zerlegen
 
Zitat:

Zitat von DenSchub
jaja, das ist mir bewusst, aber ich leg das schon am anfang fest...

ich hab das erstmal mit ner memo gemacht:
Delphi-Quellcode:
  valueedit.Strings.Delimiter := ':';
  valueedit.Strings := memo1.Lines;
aber es will nicht

imho kann das doch nicht funktionieren, wenn du dannach "Strings" wieder überschreibst ;)
Entweder:
Delphi-Quellcode:
memo1.Lines.Delimiter := ':';
valueedit.Strings := memo1.Lines;
(Wenn "TStrings" "Delimiter" kennt)
oder:
Delphi-Quellcode:
valueedit.Strings.Delimiter := ':';
valueedit.Strings.Text := memo1.Lines.Text;

DenSchub 14. Apr 2007 10:31

Re: String zerlegen
 
xZise: Keine der beidern Varianten funktioniert...

Klaus01 14. Apr 2007 10:35

Re: String zerlegen
 
getestet und funktioniert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.create;
  sl.loadfromFile('e:\test.dat');
  sl.Text:=StringReplace(sl.text,':','=',[rfReplaceAll]);
  ValueListEditor1.strings.assign(sl);
  sl.free;
end;

wobei test.dat bei mir so ausssieht:

user:password
user1:password1
user2:password3

Grüße
Klaus

DenSchub 14. Apr 2007 10:41

Re: String zerlegen
 
Joa!

Es funktioniert!
Danköö. :thumb:
Vllt seht ihr das Proggi bald in der OS-Sektion *mal überleg*

bye

Dennis

marabu 14. Apr 2007 11:52

Re: String zerlegen
 
Hallo Dennis,

Zitat:

Zitat von DenSchub
Schau dir mal den Schreenshot an

ich hatte das nicht ausreichend getestet, da ich es für völlig problemlos hielt - tut mir leid. So habe ich getestet:

Delphi-Quellcode:
begin
  with VLE.Strings do
  begin
    NameValueSeparator := ':';
    Text := 'user1:password1' + sLineBreak + 'user2:password2';
    ShowMessage(Values['user2']);
  end;
end;
Die Ausgabe ist korrekt. Aufgrund deines ScreenShots habe ich das Problem untersucht und einen ärgerlichen Fehler in der VCL entdecken müssen. In der Methode GetCell() von TValueListEditor wird zur Ermittlung des Values nicht die property NameValueSeparator verwendet, sondern das Literal '='. Das habe ich nicht gewusst. Ich kann auch nicht auf Anhieb erkennen, warum für den internen Zugriff nicht die vorhandenen Methoden von ValueListEditor.Strings verwendet werden, die diesen Fehler ja nicht aufweisen.

Sorry nochmal.


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