AGB  ·  Datenschutz  ·  Impressum  







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

string zerlegen

Ein Thema von newuser01 · begonnen am 22. Dez 2007 · letzter Beitrag vom 23. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#1

string zerlegen

  Alt 22. Dez 2007, 23:02
Delphi-Quellcode:
sl_e.LoadFromStream(Temp);

sl_TMP.StrictDelimiter := true;
sl_TMP.Delimiter := '#';

for a := 0 to sl_e.Count - 1 do
begin
  sl_tmp.DelimitedText := sl_e.Strings[a];

    for b := 1 to sl_tmp.Count - 1 do
    begin
      s := s + ' ' + sl_e.Strings[0];
    end;

  re_a.Lines.Add(s);
  sl_tmp.Clear;
  s := '';
end;
Nach dem Durchlauf ist in re_a-Lines.Strings[Count - 1] (letzte Eintrag) nur noch folgender String drin

D: { 59789999999999 { 555aaa666bbb777ccc }}

Ich möchte jetzt aus diesem String, nur noch den Wert 555aaa666bbb777ccc rausholen und einer Variable übergeben. Dieser Wert ist immer anders! Das einzige was immer gleich ist sind die Klammern "{" und "}}" sowie das "D:" Ich weis das man dies mit "pos" und "copy" lösen könnte aber ich stoß dabei an meine Grenzen Vielleicht könnt ihr ja ein wenig helfen
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

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

Re: string zerlegen

  Alt 22. Dez 2007, 23:11
Delphi-Quellcode:
NewString := Copy(OldString, PosEx('{', OldString, Pos('{', OldString)+1), Length(OldString));
NewString := Copy(NewString,1, Length(NewString)-3);
Vermutlich kommt es so nicht ganz hin, ist ungetestet, musst noch ein wenig mit rumexperimentieren. PosEx ist in der Unit StrUtils, die musst du noch einbinden.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Bastler

Registriert seit: 15. Aug 2006
153 Beiträge
 
Delphi 7 Personal
 
#3

Re: string zerlegen

  Alt 22. Dez 2007, 23:18
Also die richtigen Ansätze hast Du dir selber schon gegeben

Ich weiß nur nicht, wo man bei copy eine Grenze haben kann

Zitat:
function Copy(S; Index, Count: Integer): string;
Also doch einfach bei diesem String:
Zitat:
D: { 59789999999999 { 555aaa666bbb777ccc }}
copy('D: { 59789999999999 { 555aaa666bbb777ccc }}',23,18); bzw. bei dir ja ehr:
copy(re_a-Lines.Strings[Count - 1],23,18); Ich hoffe, ich habe mich nicht verzählt bei Count und Index, falls doch vergib' mir bitte um diese Uhrzeit...

mfg Bastler

P.S.: Falls diese Nummer "59789999999999" nich immer die gleiche Länge hat, musst du den Beginn des relevanten Terms durch eine If-Bedingung und den geschweiften Klammern feststellen...
falls es dazu Fragen gibt, einfach nochmal posten...
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir noch nicht ganz sicher
(A. Einstein)
  Mit Zitat antworten Zitat
Bastler

Registriert seit: 15. Aug 2006
153 Beiträge
 
Delphi 7 Personal
 
#4

Re: string zerlegen

  Alt 22. Dez 2007, 23:19
mist zu langsam... naja kommt ja auch das gleiche hinaus...

OT: Warum wurde ich nicht drauf hingewiesen vor dem Abschicken? ist das Script ausgeschaltet/kaputt?
Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir noch nicht ganz sicher
(A. Einstein)
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: string zerlegen

  Alt 22. Dez 2007, 23:20
Da es nicht mal in Delphi 6 die Funktion PosEx gibt hier noch eine andere Variante.
Delphi-Quellcode:
var
  LPos, Rpos: word;
begin
  //st= 'D: { 59789999999999 { 555aaa666bbb777ccc }}';
  LPos:= LastDelimiter('{', st);
  Rpos:= Pos('}}', st);
  caption:= Copy(st, Lpos+ 2, Rpos- LPos- 3);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#6

Re: string zerlegen

  Alt 22. Dez 2007, 23:37
Zitat:
Da es nicht mal in Delphi 6 die Funktion PosEx gibt hier noch eine andere Variante.
Benutze zur Zeit "Turbo Delphi" (free) sollte ich wohl mal in mein Profil ändern


"inherited" dein Code klappt bestens hier die Änderungen noch

Delphi-Quellcode:
sOld := re_a-Lines.Strings[Count - 1];
sNew := Copy(sOld, PosEx('{', sOld, Pos('{', sOld)+1), Length(sOld));
sNew := Copy(sNew,3, Length(sNew)-6);

Jetzt erhalte ich exakt 555aaa666bbb777ccc ohne Leerzeichen am Ende oder sonstiges, nur verstehen tu ich den Code nicht ganz. Vielleicht könntet ihr ihn Schritt für Schritt verständlich Dokumentieren.
Gruß: Holger

[Hobby-Programmierer]
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: string zerlegen

  Alt 23. Dez 2007, 08:40
Moin,

man kann das auch ein wenig übersichtlicher schreiben (ich hoffe, ich vertu mich da nicht):

Delphi-Quellcode:
// Position der 1. '{':
geschwKlammerAuf1 := Pos('{', OldString);

// Position der 2. '{' (gesucht wird ab dem Folgeindex der 1. '{'):
geschwKlammerAuf2 := PosEx('{', OldString, geschwKlammerAuf1 + 1);

// Kopiert die Zeichen ab der 2. '{' bis zum Stringende:
NewString := Copy(OldString, geschwKlammerAuf2, Length(OldString));

// Kopiert die Zeichen vom Anfang des Strings bis zum drittletzten Zeichen:
NewString := Copy(NewString, 1, Length(NewString)-3);
Wobei man die letzten beiden Code-Zeilen auch zusammenfassen könnte zu:

NewString := Copy(OldString, geschwKlammerAuf2, Length(OldString) - 3); wenn ich das richtig sehe. Hab's aber nicht getestet.

Grüße
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#8

Re: string zerlegen

  Alt 23. Dez 2007, 09:54
aber sag mal, weshalb nimmste nicht die funktion von bitsetter? die funktioniert ja auch unter D5

Delphi-Quellcode:
function LastString(aSTring: pChar; aLeftDelimiter, aRightDelimiter: string): string;
begin
  result := ''; //Rückgabewert Leerstring, falls Fehler aufgetreten
  inc(aString, LastDelimiter(aLeftDelimiter, aString));
  result := trim(copy(aString, 1, pos(aRightDelimiter, aString)-1));
end;
Aufruf: DeinZielString := LastString('D: { 59789999999999 {555aaa666bbb777ccc}}', '{', '}');
  Mit Zitat antworten Zitat
marabu

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

Re: string zerlegen

  Alt 23. Dez 2007, 10:43
Hallo,

sogar die interne Zerlegung älterer StringList-Implementierungen erledigt das:

Delphi-Quellcode:
function ExtractField(const s: string; index: Integer): string;
begin
  with TStringList.Create do
  try
    CommaText := s;
    Result := Strings[index];
  finally
    Free;
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  ShowMessage(ExtractField('D: { 59789999999999 { 555aaa666bbb777ccc }}', 4));
end;
Frohe Weihnachten
  Mit Zitat antworten Zitat
newuser01

Registriert seit: 30. Aug 2006
248 Beiträge
 
Delphi 7 Professional
 
#10

Re: string zerlegen

  Alt 23. Dez 2007, 11:22
Zitat:
aber sag mal, weshalb nimmste nicht die funktion von bitsetter? die funktioniert ja auch unter D5
Ich benutze fast nur noch Turbo Delphi die kostenlose Version. Wie bereits gesagt sollte ich mal im Profil ändern
----------------------------------------------------------------------------------------------------------------------

Ein Danke an "Matze" für die Erklärung und auch ein Dank an allen anderen die geholfen haben.


Ich wünsche euch noch eine frohe Weihnacht und ein guten Rutsch ins neue Jahr
Gruß: Holger

[Hobby-Programmierer]
  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 10:15 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