Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Reg Exp in Pos() (https://www.delphipraxis.net/66510-reg-exp-pos.html)

Nisbo 30. Mär 2006 16:10


Reg Exp in Pos()
 
Moin Moin,

ich habe diesen Code

Delphi-Quellcode:
position  := Pos(ListBox2.items[ccc] + ' 27' + FormatDateTime('hh', time),Memo1.Lines.Text);
der soweit ja auch funktioniert, das Problem ist das ich da wo gerade die 27 steht auch eine andere zweistellige Zahl stehen könnte und ich deshalb mit RegExp irgendwie arbeiten muß

So wie mir RegExp von PHP und htaccess bekannt sind geht es aber nicht

in der OH steht was von Regulären Ausdrücken (müßte also ja auch OHNE das install von diesem RegExp Unit gehen), aber ganz Klasse ohne Beispiele

müßte eigendlich ja so ausschauen

([0-9]{2})

Wie gesagt es geht darum das an der stelle wo jetzt die 27 steht jede andere Zahl stehen kann und darauf möchte ich prüfen

die texte im memo schauen z.b. so aus

ABCD DDHHNN weiterer text

ABCD ist dann pro zeile in ListBox2.items[ccc] drin, das ganze wird durch eine schleife ausgelesen, aber das nur am rand
DD = Tag (auf den möchte ich prüfen)
HH = Stunde (die wird aktuell genommen)
NN = Minute danach wird aber nicht mehr gesucht
danach dann der eigendliche text

hoffe ich habe mich klar ausgedrückt

PS: in der OH zu Pos() steht bei mir in D5 leider nicht wirklich viel, weil das hier ja immer wieder angemerkt wurde ;)

da steht bei mir nur das drin
Zitat:

Die Funktion Pos gibt den Indexwert des ersten Zeichens innerhalb des angegebenen Teil-Strings zurück, der in einem String vorkommt.

Unit

System

Kategorie

String-Verarbeitung

function Pos(Substr: string; S: string): Integer;

Beschreibung

Pos sucht in dem String S nach dem Teil-String Substr. Die Parameter Substr und S sind String-Ausdrücke.

Wird der Teil-String gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S zurück. Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt. Ist Substr nicht vorhanden, wird der Wert Null zurückgegeben.

alcaeus 30. Mär 2006 16:16

Re: Reg Exp in Pos()
 
Moin,

AFAIR musst du dafuer eine RegExp-Unit installieren. Ich verwende die TPerlRegExp-Komponenten, funktionieren einwandfrei :)

Greetz
alcaeus

Nisbo 30. Mär 2006 16:24

Re: Reg Exp in Pos()
 
ok wenn du dafür eine DAU-Anleitung hast wo ich die Unit bekomme, wie ich die Unit Installiere und dann in Pos nutze, kein Problem :D

Nur warum stehen dann RegExp in der OH drinn wenn D5 das gar nicht kann ?

Christian Seehase 30. Mär 2006 18:32

Re: Reg Exp in Pos()
 
Moin Nisbo,

Zitat:

Zitat von Nisbo
Wie gesagt es geht darum das an der stelle wo jetzt die 27 steht jede andere Zahl stehen kann und darauf möchte ich prüfen

da wird Dir auch kein regulärer Ausdruck helfen, da Pos je Aufruf immer nur mit einem festen String arbeitet.
Um eine Schleife, die die Variablen Werte durchprobiert wirst Du mit Pos nicht drumherum kommen.

Wenn Du aber schon mit regulären Ausrücken arbeitest: Wozu dann noch Pos?
Entweder die Zeile entspricht dem Ausdruck oder eben nicht.

Nisbo 30. Mär 2006 18:43

Re: Reg Exp in Pos()
 
das ganze ist erstmal nur zum testen, das programm liest ca 1400 textdateien ein welche eigendlich immer aktuell mit dem datum codiert sind, das ganze sieht dann später so aus:

Delphi-Quellcode:
position  := Pos(ListBox2.items[ccc] + FormatDateTime('dd', date) + FormatDateTime('hh', time),Memo1.Lines.Text);
das ist ja ncith das problem, das problem ist das ich zum testen jetzt nur alte dateien habe und das ganze nicht hardgecodet haben wollte bis die final da ist, deswegen der test bei der 27 ob das zahlen sind

Pos brauche ich auf jeden fall denn ich kopiere ja ab dieser stelle den code raus den ich brauche, das geht auch alles

naja notfalls muß ich es halt doch hardgecodet lassen und dann immer umschreiben :D

Ups jetzt hätte ich hier fast F9 gedrückt um den Text abzuschicken :D

himitsu 30. Mär 2006 18:46

Re: Reg Exp in Pos()
 
Ansonsten

Delphi-Quellcode:
S := deinString;

i := 0;
For i2 := 1 to Length(S) - 3 do
  If (S[i2] = ' ') and (S[i2 + 1] in ['0'..'9']) and (S[i2 + 2] in ['0'..'9']) Then Begin
    i := i2;
    Break;
  End;

diePosition := i;
Damit findet man z.B. eine zweistellige Zahl mit dem Lehrzeichen davor ... kannst du ja entsprechend anpassen ._.


Oder etwa so:
Delphi-Quellcode:
S := Memo1.Lines.Text;
S2 := ListBox2.items[ccc] + ' **' + FormatDateTime('hh', time);
Position := 0;
For i := 1 to Length(S) - Length(S2) do Begin
  For i2 := 1 to Length(S2) do
    If (S[i] <> S2[i]) and (S2[i] <> '*') Then GoTo Ende;
  Position := i;
  Break;
  Ende:
End;
I hoffe ma es geht so ._. (für das * kannst/mußt du halt nur ein Zeichen nehmen, welches nicht in S2 vorkommt)


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