Access, diviser un champ [Résolu/Fermé]

Signaler
-
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
-
Bonjour,

Alors voilà, j'ai un petit problème.

J'ai des logs à importer dans une base de données Access, ce qui s'est déroulé sans soucis, mais maintenant, il faudrait que je mette en forme ma table.

Pour info, il n'y a aucun délimiteur dans mes fichiers txt importés donc j'ai tout fait à la longueur pour le moment, le problème est le suivant :

Les logs concernent des @IP et des ports (que je ne peux me permettre de poster sur le forum ou d'envoyer à quelqu'un) mais bien sûr, comme tout le monde sait, les @IP ont des longueurs variables et c'est là que ce pose le problème.
Mon champ se trouve sous cette forme : @IP.Port ( en gros X.X.X.X.Port )
J'illustre avec 2 @IP et ports bidons :

1.2.3.4.33212
10.140.255.254.80

donc dans ces exemples, 1.2.3.4 et 10.140.255.254 sont des @IP et 33212 et 80 sont des ports.
Maintenant, il faudrait que j'arrive à dissocier l'un de l'autre. Comment puis-je faire (le SQL serait le bienvenu si possible).

Merci beaucoup de votre aide précieuse!


1 réponse

Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 999
Salut,

tu peux faire ça :

SELECT Left(IP,InStrRev(IP,".")-1),right(IP,len(IP)-InStrRev(IP,"."))
FROM MA_TABLE;

On suppose que IP est le nom du champ que l'on veut éclater.
Ca consiste à chercher où est le dernier "." (en le cherchant en premier mais en partant de la fin, avec l'instruction InStrRev).

Ensuite, on fait des calculs pour récupérer le bon nombre de caractères.
Merci beaucoup de ta réponse, je vais essayer ça et je reviendrais dire si cela marche.

Je ne comprends pas pourquoi il faut faire des calculs pour récupérer le bon nombre de caractères par contre étant donné qu'un port peut faire de 1 à 5 chiffres et une @IP de 7 à 19 caractères (en comptant les points)
Wouhou c'est bon ça marche!!!

Merci infiniment tu me facilite énormément la tâche!
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 999
Comment diviser ton champ ?
En cherchant le dernier point, c'est celui qui sépare l'ip du port.
Comment trouver le dernier point ?
C'est le premier si l'on cherche à l'envers.
Une fois que l'on retrouvé sa position, il suffit de prendre tous les caractères à sa droite pour récupérer le port et tous les caractères à sa gauche pour avoir l'ip, mais comme on ne sait pas dire 'tous' les caractères, on calcule la longueur totale de la chaine (avec len) et on taille dedans avec joyeuseté en fonction de l'endroit où se trouve le point séparateur.
C'est plus clair ?
Ah ok ce calcul la ^^ oui comme ca c'est plus clair :-)
Encore merci!
Messages postés
23763
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 999
C'est juste du SQL avec des fonctions VBA access...