AGB  ·  Datenschutz  ·  Impressum  







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

String Code überprüfen

Ein Thema von lemomo · begonnen am 17. Jul 2012 · letzter Beitrag vom 22. Jul 2012
Antwort Antwort
Seite 1 von 2  1 2      
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

AW: String Code überprüfen

  Alt 17. Jul 2012, 19:04
Statt sich mit copy, trystrtoint und dergleichen herumzuschlagen, ist es praktisch immer viel bequemer, eine Regex Unit einzubinden und die String-Prüfungen und Zerlegungen über reguläre Ausdrücke zu machen. Das reduziert den nötigen Code und den Programmieraufwand auf ein Bruchteil. Ganz am Anfang natürlich etwas gewöhnungsbedürftig, aber es zahlt sich wirklich aus.

Mich erstaunt, dass sich noch immer relativ wenige Programierer dieser Möglichkeit bewusst sind.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: String Code überprüfen

  Alt 17. Jul 2012, 19:24
bewusst schon, aber ich empfinde es als unleserlich und mühsam...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: String Code überprüfen

  Alt 17. Jul 2012, 21:58
@Idefix2
Nichts gegen reguläre Ausdrücke, aber ich habe den Eindruck das der TE damit leicht überfordert wäre.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
lemomo

Registriert seit: 17. Jul 2012
2 Beiträge
 
#4

AW: String Code überprüfen

  Alt 19. Jul 2012, 06:38
Danke für die Antworte ich werde mich heute nochmal mit der Aufgabe setzen , und nachher euch berichtet was ich schon oder nicht geschafft habe. Aber zuerst nochmal eine Erklärung mit beispiel (als Anhang ein beispiel Datei )


ich möchte ein Datei lesen, und danach überprüfen ob:

1-. O1- oder O2 ohne Leerzeichen geschrieben ist d.h vor der O1- oder O3 muss nicht leer sein oder gar nicht geschrieben sein.
2-. O1- , O2+ , O3 sich immer nach 1 erhöhen weil es kann passiert dass nach O45- man zum beispiel O47+ geschrieben hat

die + und - nach der O1 oder O4 sind egal müssen nicht überprüft werden

mfg Lemomo
Angehängte Dateien
Dateityp: txt text1.txt (1,2 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: String Code überprüfen

  Alt 19. Jul 2012, 11:01
bewusst schon, aber ich empfinde es als unleserlich und mühsam...
Ich habe geschrieben "gewöhnungsbedürftig", aber es zahlt sich eben wirklich aus. Unleserlich ist es nur ganz am Anfang - wie so ziemlich alles, was neu ist, auch ein gut geschriebenes Delphi Programm ist für einen Programmieranfänger grösstenteils unverständlich. Wenn man sich einmal mit ihnen angefreundet hat, lässt sich mit regulären Ausdrücken weitaus mehr anfangen, als man auf den ersten Blick meinen sollte, und das eigentlich immer mit einem Bruchteil des Aufwands, der für einen "klassischen" Programmieransatz nötig ist. Insofern ist es alles andere als mühsam. Give it a try
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: String Code überprüfen

  Alt 19. Jul 2012, 11:59
So wie die Daten aussehen, würde ich Idefix' Ansatz bevorzugen.
Die sehr konservative Möglichkeit wäre z.b.
Delphi-Quellcode:
  readln(f,Satz);
  if (length(satz)>0) and (Satz[1]='O') then begin
    if pos('-',satz)>0 then
      satz:=copy(satz,2,pos('-',satz)-1);
    if pos('-',satz)>0 then
      satz:=copy(satz,2,pos('+',satz)-1);
    pruflist.add(satz);
 end;
wobei pruflist eine Stringliste ist.
Du solltst diese dan von 0.. .count durchgehen und die entsprechenden integerwerte vergleichen.

Eine andere Möglichkeit ist es zB. mit altsatz und aktsatz zu operieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#7

AW: String Code überprüfen

  Alt 19. Jul 2012, 12:30
Du solltst diese dan von 0.. .count durchgehen
0.. .count - 1
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: String Code überprüfen

  Alt 19. Jul 2012, 18:07
Du solltst diese dan von 0.. .count durchgehen
0.. .count - 1
Omnia mea culpa, omnia maxima culpa

salve

Carolus
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#9

AW: String Code überprüfen

  Alt 19. Jul 2012, 18:09
Wer ohne Fehler ist, der werfe das erste Schwein (oder so ähnlich)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#10

AW: String Code überprüfen

  Alt 19. Jul 2012, 12:57
Mit dem regex "^O(\d+)" habe ich alle Prüfungen erschlagen und schon den reinen Ziffernstring in match[1] gespeichert, dann einfach ein strtoint(match[1]) (nicht einmal trystrtoint ist nötig, weil in match[1] steht sicher eine Ziffernfolge, wenn regexmatch erfolgreich war). Wenn man will, kann man sogar leicht die Anzahl der Ziffern auf maximal 4, 5 oder irgend etwas sinnvolles beschränken, gefolgt vom Zeilenende oder einem Zeichen, das keine Ziffer ist, um sicherzustellen, dass kein Überlauf bei der String-Konvertierung erfolgt, es könnte ja auch eine Zeile: O1234567891234567891234567891234567891234567891234 56789+- dazwischenrutschen. Der Regex schaut dann einfach so aus: "^O(\d{1,5})(\D|$)"

Wie mühsam das Ganze auf die Klassische Art ist (und in Wirklichkeit auch insofern schlecht lesbar, als nicht auf den 1. Blick sichtbar ist, was genau in Sonderfällen passiert), siehst Du schon daran, dass auch diese schon recht komplizierte Variante nicht ausreicht: Was ist, wenn weder "+" noch "-" auf die Zahl, sondern ein anderes Zeichen folgt - es geht übrigens aus der Beschreibung nicht klar hervor, ob z.B. O17abc-+ erlaubt oder verboten wäre?

Wenn nur + oder - oder das Zeilenende auf die Ziffern folgen darf, aber kein anderes Zeichen, dann ändere ich den Regex einfach auf "$O(\d{1,5})([+-]|$)". Wenn ich so eine Änderung mit klassischer Programmierung machen will, dann muss ich bei jeder Kleinigkeit am code selbst basteln und über die richtige Abfolge der Abfragen tüfteln.

Noch dazu ist die klassische Programmierung durch die schiere Codemenge fehleranfälliger, hier müsste z.B. die letzte Abfrage if pos('+',satz)>0 then statt if pos('-',satz)>0 then lauten, das ist sicher beim copy & paste untergegangen.

Geändert von idefix2 (19. Jul 2012 um 13:07 Uhr)
  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 18:38 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