2017-03-15 1 views
-2

J'ai des lignes d'objet e-mail et je veux trouver des références de billets dans eux, il pourrait être le ref TT est comme 12345678. Une ligne de sujet peut avoir plusieurs 8 chiffres Nombres!Lazarus fonction de trouver des nombres à 8 chiffres dans une chaîne

Je suis en utilisant le code ci-dessous mais il est stripping simplement les 8 premiers chiffres puis en faisant un chèque si cela est 8 car longue:

function StripNumbers(const aString: string): string; 
var 
    C: char; 
begin 
    Result := ''; 
    for C in aString do 
    begin 
    if CharInSet(C, ['0'..'9']) then 
    begin 
     Result := Result + C; 
    end; 
    end; 
end; 

Exemple:

ma variable de chaîne est

subject := "yada yada XF12345678 blabla XF87654321 duh XF11.223344" 
fonction

GetTTRefs(subject) devrait entraîner "12345678;87654321;"

Merci pour les réponses.

+0

Ce code ne supprime pas les 8 premiers chiffres *. Il ne supprime rien, et il recueille simplement tous les chiffres de la chaîne; il ne s'arrête pas à 8, mais collectera de zéro à des chiffres illimités. Vous allez avoir besoin d'être plus clair sur ce que vous demandez. –

+0

@ ken-white Je sais qu'il supprime simplement tous les caractères non numériques d'une chaîne et je fais une vérification par la suite si ce résultat est long de 8 chiffres. J'ai ajouté un exemple. – modzsi

Répondre

-2
function GotTTRefs(Subject:string;Digits:Byte):string; 
var 
    i:integer; 
    TT:string; 
begin 
    i:=1; 
    while i <= Length(Subject)-Digits+1 do 
    begin 
    if Subject[i] in ['1'..'9'] then 
     begin 
      TT:=Copy(Subject,i,Digits); 
      if (StrToQWordDef(TT, 0) <> 0) then 
       Result:=Result+TT+';'; 
     end; 
    inc(i); 
    end; 
end; 
+0

C'est plutôt mauvais. Vous devriez passer en revue les caractères de la chaîne, en utilisant l'indexation de tableau '[i]' en cherchant les valeurs '> = '0'' et' <=' 9''. De cette façon, vous n'avez pas besoin d'effectuer une allocation de tas jusqu'à ce que vous trouviez une valeur. –

+0

merci David, je l'ai maintenant réécrit sur la base de votre suggestion. – modzsi