AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Wert mit Hilfe einer Formatierungsmaske aus String auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Wert mit Hilfe einer Formatierungsmaske aus String auslesen

Ein Thema von Hutzel · begonnen am 19. Jun 2010 · letzter Beitrag vom 20. Jun 2010
Antwort Antwort
Hutzel

Registriert seit: 10. Mai 2008
5 Beiträge
 
#1

Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 22:41
Hallo zusammen!

Ich möchte aus einem String mit Hilfe einer Maske einen Substring ermitteln - Ungefähr so:
  • SourceString z.B. : 'Die Simpsons Folge 114.avi'
  • Format: 'Die Simpsons Folge %s.avi'
  • Platzhalter: '%s'
  • --> Als Ergebnis sollte der Algorithmus hier die Nummer der Folge, also '114' zurückliefern

Jetzt durchwühle schon seit ner geschlagenen Stunde vergeblich die Delphi-Hilfe und das Forum.
Hatte eigentlich vermutet, dass Delphi irgendwo eine entsprechende Funktion mitliefert. Vielleicht bin ich aber auch einfach zu blöd, sie zu finden...

Erwarte nicht, dass das jemand für mich schreibt, aber wollte nur nochmal nachgefragt haben ob's schon was gibt, bevor ich die Funktion selber schreibe.

Danke im Voraus für Eure Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 22:48
Hallo,

also zum durchsuchen von Strings, wird dir POS weiterhelfen. Darüber gibt es hier auch einige Beiträge. Allerdings musst Du Dir die Maske selberschreiben. Die sollte ja nach deinen Vorstellungen sein. Schreib Dir einen Parser, der die Daten wie Du Sie haben willst zurück gibt.

Am besten das ganze in eine Klasse packen, dann kannst Du verschieden Sachen später davon ableiten.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 22:50
Das Problem an der Geschichte ist, daß die "Zahl" nicht immer aus der gleichen Anzahl Zeichen besteht. Sonst wäre das mit Copy schnell erledigt.

Da würde mir folgendes einfallen:
Zitat:
Format: 'Die Simpsons Folge %s.avi'
- als "Platzhalter" ein Zeichen was eher unwahrscheinlich ist.
Beispiel: Format: 'Die Simpsons Folge #.avi'
- die Position des # und das Zeichen danach (.) bestimmen
- ab der Position jedes Zeichen einem String hinzufügen bis . erreicht
- dann sollte im String z.B. "114" stehen.
- ggf. bei Bedarf in z.B. Integer wandeln.

...so als Idee.
  Mit Zitat antworten Zitat
Hutzel

Registriert seit: 10. Mai 2008
5 Beiträge
 
#4

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 23:16
Danke für die Antworten.

Schade, also keine Delphi-Interne Function...

Zitat:
als "Platzhalter" ein Zeichen was eher unwahrscheinlich ist.
Werde als Platzhalter ein '?' nehmen, das ist in Dateinamen ja nicht erlaubt, kommt also garantiert nicht vor.
Damit wäre die Position ja schon mal bestimmt, ab der ich den Substring kopieren muss.

Jetzt gehts an die Länge des Substrings:
Zitat:
die Position des # und das Zeichen danach (.) bestimmen
Wenn ich das Zeichen danach alleine nehme könnte das vllt. zu Fehlern führen
(z.B. bei 'Die Simpsons Folge 19.06.avi'), aber wenn ich den Rest der Maske nehme ('.avi') und mit PosEx dessen Position bestimme, müsste es doch gehen.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 23:20
na gut, ich wußte nicht, daß auch 19.06.avi dabei sein kann.

wie du schon sagtest, mit PosEx die Position von .avi bestimmen und dann mit copy zwischen "Beginn" und "Ende" rauskopieren.
  Mit Zitat antworten Zitat
Hutzel

Registriert seit: 10. Mai 2008
5 Beiträge
 
#6

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 19. Jun 2010, 23:37
Ja, hätte ich etwas konkretisieren können. Die Funktion sollte möglichst universell sein.
Lass dann gleich mal was von mir Hören, wenn ich fertig bin...
  Mit Zitat antworten Zitat
Hutzel

Registriert seit: 10. Mai 2008
5 Beiträge
 
#7

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 20. Jun 2010, 00:05
Da isses Danke für die Mithilfe.
Entschuldigt mein "Denglisch"

Code:
function GetFormatValue(SourceString, Formatierung, Platzhalter: string): string;
  //Wert mit Maske aus String auslesen
  //z.B. ermitteln der Simpsons-Folge:
  //Eingabe:
  //  SourceString:   'Simpsons Folge 114.avi'
  //  Formatierung:   'Simpsons Folge ?.avi'
  //  Platzhalter:    '?'
  //  --> Ergebnis:   '114'
var
  CutStart, CutEnd: integer;
  Endung, Teilstring: string;
begin
  //vordere Schneideposition bestimmen
    CutStart:= Pos(Platzhalter,Formatierung);

  //Endung (= alle Zeichen hinter dem Platzhalter) bestimmen
    Endung:= RightStr(Formatierung,length(Formatierung)-CutStart-length(Platzhalter)+1);

  //hintere Schneideposition bestimmen
    CutEnd:= posEx(Endung,SourceString,CutStart);

  //Teilstring kopieren und zurückgeben
    TeilString:= copy(SourceString,CutStart,CutEnd-CutStart);
    Result:= Teilstring;
end;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 20. Jun 2010, 00:07
na siehste, geht doch.

PS: manchmal ist Denglisch nicht verkehrt. Da kommt man nicht mit reservierten Wörtern in Konflikt. Nur wenn mehrere Personen den Quelltext pflegen ist es nicht angebracht

Geändert von haentschman (20. Jun 2010 um 09:09 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Wert mit Hilfe einer Formatierungsmaske aus String auslesen

  Alt 20. Jun 2010, 00:24
Du hast das Problem jetzt zwar schon selbst gelöst, aber dennoch ein guter Tipp für die Zukunft, gerade, wenn's mal komplizierter wird, sind Hier im Forum suchenReguläre Ausdrücke (auch bekannt als RegEx(p)).
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:49 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