AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Im String Nach Wort suchen und nebenstehendes auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Im String Nach Wort suchen und nebenstehendes auslesen

Ein Thema von CVi · begonnen am 8. Dez 2015 · letzter Beitrag vom 8. Dez 2015
Antwort Antwort
Seite 2 von 3     12 3      
CVi

Registriert seit: 21. Nov 2010
15 Beiträge
 
#11

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 09:55
Danke Klaus

genau das habe ich gesucht/versucht
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 10:10
Aber

Showmessage(GetValue('Name1= "Meier" Name2= "Schmidt" Strasse= "Hauptstrasse 22" Vorname= "Bernd"', 'Vorname'));
Liefert :
Zitat:
Bernd"
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 10:12
Danke Klaus

genau das habe ich gesucht/versucht
Schreib dir wenigstens in den Quellcode hinein:
Delphi-Quellcode:
// Wenn es mal seltsame Ergebnisse gibt,
// dann muss ich wohl doch mit einem Parser ran
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 10:14
Aber

Showmessage(GetValue('Name1= "Meier" Name2= "Schmidt" Strasse= "Hauptstrasse 22" Vorname= "Bernd"', 'Vorname'));
Liefert :
Zitat:
Bernd"
Darum sind Unit-Tests auch zwingend notwendig.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#15

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 10:29
[...] Darum sind Unit-Tests auch zwingend notwendig.
Ach, komm, (Unit-)Testing wird überbewertet. Reicht doch, wenn es kompiliert...
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#16

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 10:31
Aber

Showmessage(GetValue('Name1= "Meier" Name2= "Schmidt" Strasse= "Hauptstrasse 22" Vorname= "Bernd"', 'Vorname'));
Liefert :
Zitat:
Bernd"
Darum sind Unit-Tests auch zwingend notwendig.
Leider hab ich es noch nicht geschafft DUnit im Browser einzubinden und für die fehlerfreie Einbindung im Kopf fehlte noch der Kaffee.
Ich bin da auch nicht ganz sicher, was die optimale Variante ist, um das zu berichtigen, vielleicht:
Delphi-Quellcode:
  if meinString[Length(meinString)]='"then
    meinString=Copy(meinString,1,Length(meinString)-1);
Für alle weiteren Probleme die mit der Struktur noch auftreten könnten ist dieser Schnellschuss aber dann auch wirklich am Ende und es hilft nur noch ein Parser.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 13:06
Mal eben schnell hingetippt.
Die Idee dahinter: Mit einer StringList kann man auch Wertepaare "verwalten".
Da der String ja immer gleich aufgebaut sein soll, werden erstmal überflüssige Leerzeichen rausgeschmissen. Die Paare sind durch ein "=" verbunden. Ich meine, dass dann kein Leerzeichen dazwischen sein darf. Die Anführungszeichen mit folgendem Leerzeichen trennt ein Wertepaar vom nächsten. Der Sonderfall des letzten Wertepaares muss natürlich berücksichtigt werden.

Delphi-Quellcode:
var
  SL : TStringList;
  Teil, Mein : String;
begin
  SL := TStringList.Create;
  SL.NameValueSeparator := '=';
  Mein := StringReplace('Name1= "Meier" Name2= "Schmidt" Strasse= "Hauptstrasse 22" Vorname= "Bernd"', '= "', '="', [rfReplaceAll]);
  if length(Mein) > 0 then
  begin
    Repeat
      Teil := copy(Mein, 1, Pos('" ', Mein));
      if Teil = 'then
      begin
        Teil := Mein;
      end;
      SL.Add(Teil);
      Delete(Mein, 1, Pos('" ', Mein) + 1);
    until Pos('" ', Mein) = 0;
  end;
  ShowMessage(SL.Values['Strasse']);
end;
Dann kann man einfach über:
StringList.Values['Strasse'] zum Beispiel an den Straßennamen kommen.

Oder denke ich jetzt zu einfach?
Peter

Geändert von Jasocul ( 8. Dez 2015 um 13:18 Uhr) Grund: Doch noch ein Delphi dabei gehabt
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.064 Beiträge
 
Delphi XE2 Professional
 
#18

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 13:29
Nicht sehr elegant, und nur oberflächlich geprüft:

Delphi-Quellcode:
FUNCTION GetValue(const Text,Id:String):String;
var I,J,K,Len:Integer;
begin
   Result:='';
   if (Text='') or (Id='') then Exit;
   Len:=Length(ID);
   J:=0;
   repeat
      K:=PosEx('"',Text,J+1); // erstes '"'
      J:=PosEx('"',Text,K+1); // zweites '"'
      if J=0 then Exit;
      I:=J;
      while (I>0) and (Text[I]<>'=') do Dec(I);
      Dec(I);
      while (I>0) and (Text[I]=' ') do Dec(I);
      Dec(I,Len);
      if I>=0 then
         if SameText(Copy(Text,I+1,Len),Id) then begin
            if I<>0 then begin
               while (I>1) and (Text[I]=' ') do Dec(I);
               if (I>1) and (Text[I]<>'"') then Exit;
            end;
            Result:=Copy(Text,K+1,J-K-1);
            Exit;
         end;
   until False;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 14:05
Das Grundproblem ist und bleibt, dass die einzelnen Zeichen in dem Daten-String eine unterschiedliche Bedeutung haben können abhängig von den Zeichen davor.

Darum kann man nicht anhand eines einzelnen Zeichens die Bedeutung erkennen.
Darum muss man parsen um diese Bedeutung interpretieren zu können.
Darum braucht man auch eine komplette Beschreibung des Datenformats.
Darum braucht man auch komplexe Beispiele.
Code:
Key=Name1
Value=Ein = "schöner" = Tag

Name1= "Ein = ""schöner"" = Tag"
Darum braucht man auch Unit-Tests um diese komplexen Beispiele gegen die Implementierung zu testen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: Im String Nach Wort suchen und nebenstehendes auslesen

  Alt 8. Dez 2015, 14:20
Völlig richtig, aber das Beispiel ist schon sehr konstruiert.
Es muss klar definiert sein, was vom Fremdprogramm kommt. Ansonsten wird auch der beste Parser nicht alle Fälle abdecken können. Auch ein Parser kann nur nach definierten Regeln die Daten analysieren.

Aber wie du schon weiter oben geschrieben hast, sollte besser ein Standard-Format verwendet werden, falls möglich.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 07:50 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