Access, diviser un champ

Résolu/Fermé
vermeiren - 13 janv. 2011 à 15:21
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 - 14 janv. 2011 à 17:59
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

blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
14 janv. 2011 à 10:50
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.
0
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)
0
Wouhou c'est bon ça marche!!!

Merci infiniment tu me facilite énormément la tâche!
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
14 janv. 2011 à 16:57
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 ?
0
Ah ok ce calcul la ^^ oui comme ca c'est plus clair :-)
Encore merci!
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
14 janv. 2011 à 17:59
C'est juste du SQL avec des fonctions VBA access...
0