2016-08-23 3 views
-1

Je voudrais capturer l'adresse IP de passerelle dynamique remplie dans un mémo à une zone de texte. Comment puis-je le faire avec des caractères génériques ou capturer toute la ligne de la passerelle qui commence par "Gateway: 10.127. *. *" Et obtenir l'adresse IP de la passerelle à la zone de texte.Comment faire pour capturer le texte de mémo pour éditer Delphi

Voici l'exemple de texte du mémo déjà capturé:

Description: Microsoft Hosted Network Virtual Adapter 
HW Address Length: 6 
HWAddress: E0:2A:82:F9:B2:3E 
Index: 32 
Type: 71 
CurrentIPAddress: 
IP Addresses: 192.168.48.1/255.255.255.0 
Gateway: 0.0.0.0/255.255.255.255 
Name: {22712B8F-5E3A-48D4-8C0D-771708BF0305} 
Description: HUAWEI Mobile Connect - Network Card 
HW Address Length: 6 
HWAddress: 0C:5B:8F:27:9A:64 
Index: 4 
Type: 243 
CurrentIPAddress: 
IP Addresses: 10.127.144.193/255.255.255.252 
Gateway: 10.127.144.194/255.255.255.255 

EDIT: (de commentaire)

I:= Pos('Gateway: 10.127.', Memo1.Text); 
if I > 0 then begin 
    L := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, (intTostr(1)); 
    edit1.Text:=(intTostr(L)); 
+1

Quelle version de Delphi? Les versions récentes supportent des expressions régulières qui peuvent être utilisées pour aider ici; pas les versions antérieures. –

+0

utilise Delphi 7 –

+0

Quelle partie de ce que vous trouvez difficile? Pourquoi utilisez-vous un contrôle graphique pour le traitement de texte? À quoi ressemble votre code? Espérez-vous que nous allons écrire votre code pour vous? –

Répondre

1

façon easist pour y parvenir serait de itérer sur les lignes de la note de service et vérifier si il commence par "Gateway: 10.127.".

Par exemple:

for LString in memo.Lines do 
    if AnsiStartsText('Gateway: 10.127.', LString) then 
    textbox.Caption := LString 

Vous pouvez utiliser des expressions régulières aussi bien pour une manipulation plus précise.

+0

Hoffmann n'a pas réussi à implémenter cette méthode –

+3

Delphi 7 n'a pas le for .. in loop, ni les expressions régulières qui ont été suggérées comme pouvant aider, vous devrez utiliser une boucle for avec un index, un un peu comme: pour I: = 0 à memo.lines.count -1 faire –

3

Ceci est une version Delphi 7 de la réponse de René:

var 
    ii: integer 
begin 
    for ii := 0 to memo.lines.count -1 do begin 
    if pos('Gateway: 10.127.', memo.lines[ii]) > 0 then begin 
     textbox.caption := memo.lines[ii]; 
     break; 
    end; 
    end; 
end; 
+0

merci beaucoup @Micheal Vicent ça fonctionne bien sa capture Comment puis-je supprimer la passerelle: mot et ne restent avec le résultat à '10.127 .' –

+6

@JkRobbin Comment pensez-vous que cela serait fait? Avez-vous vraiment abandonné tout espoir de résoudre cela vous-même? C'est un traitement de texte simple. Ne posez pas de nouvelles questions dans les commentaires. Pourquoi ne pas trouver un tutoriel ou un livre de texte ou même la documentation. Vous n'êtes sûrement pas la première personne à vouloir extraire une sous-chaîne? Êtes-vous sûr que vous ne pouvez pas travailler cela par vous-même? Je sais que j'ai l'air dur, mais vous n'essayez tout simplement pas assez, et ce site n'est pas destiné à apprendre aux novices comment faire les tâches de base. S'il vous plaît visitez le [aide]. Nous sommes ici pour créer une ressource de questions et réponses qui sera utile aux futurs visiteurs. –

+2

uniquement pour l'exhaustivité: vous ne pouvez pas faire confiance aux espaces ou aux signes dans un texte créé et capturé! Ici, pas 100%, mais mieux: 'si POS ('GATEWAY: 10.127.', UpperCase (StringReplace (Memo1.lines [ii], '', '', [rfReplaceAll])))> 0 puis' –