Decomposition d'une chaine de caractere

Signaler
Messages postés
45
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2005
-
Belette32
Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007
-
salut,

<164>Oct 20 2005 14:24:16: %PIX-4-106023: Deny tcp src
outside:172.22.1.250/3530 dst inside:172.2.2.12/135 by access-group
"outside_in"

je veux decompser cette chaine de caractere pour placer chaque
champ(date,heure,protocole,adresse source,adresse dest...) dans un
tableau...

merci d'avance pour votre aide

8 réponses

Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007

C simple, t'as deux solutions:

1° : tu decompose le string lettre par lettre grace a l'option "String.charAt(int)", ou string designe ton texte et un int qui designe la nieme lettre de ta phrase.

2° : tu te sers de la class streamtokenizer. cette class consiste a decouper une phrase en une serie de mots(tres utile si tu connait pas la taille exacte de la phrase). Puis tu decompose chacun de tes mots en parametre. ex : pour 14:24:16: , ce sera ton 4°mot ke tu decompose(grace a charAt) pour obtenir heure=14, etc.. .

Tu trouvera les commandes relatives aux classes sur le site de sun.


Bonne chance.


Belette32

Si t arrive pas, laisse moi un message, j'essairais de t'aider.
Messages postés
45
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2005

salut belette32

merci pour ton aide,

en fin de compte j'ai utilisé la classe StringTonkenizer qui m'a permis de decomposer ma chaine de caractére et voici le code:

String [] test=null;


StringTokenizer tok = new StringTokenizer(ligne,":"+" "+"/"+">");

while (tok.hasMoreTokens()) {


String s =tok.nextToken();


System.out.println("[token] "+ s);

test[j]=s;

j++;

}



mais le problem c'est que je veux sauvegarder les mots obtenue dans un tableau mais je n'arrive pas...

j'ai creé un tableau de String,mais ca ne marche pas(des que j'ajoute
la ligne "test[j]=s;" la boulce while ne fonctionne plus...

merci d'avance
Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007

slt dans ta boucle while , tu defini un string et c tres mauvais. Il faut que tu cree ton string juste avant la boucle.


Pour le test j, c normal car ton j n'apparait pas dans la boucle, donc la variable j ne bouge pas. De plus, il faut ke tu initailise ta variable si tu veux t'en servir.


Je me pencherais plus longtemps sur la question cet aprem car je suis au boulot. Si tu veux, t'as ka me copier ton code complet et je te dirais ce k'il faut modifier.


Belette32
Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007

re slt
Voila une solutions qui je pense ne posera plus d'erreur:

String [] test=new String[20];
StringTokenizer tok = new StringTokenizer(ligne,":"+" "+"/"+">");
int j=0;
String s=new String();
while (tok.hasMoreTokens())
{
s =tok.nextToken();
System.out.println("[token] "+ s);
test[j]=s;
j++;
}

Je t'ai mis les lignes a modifier en gras. J'ai essayé et ça marche. Si t'es toujours embetté, hésite pas a me laisser un message.

Belette32
Messages postés
45
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
22 décembre 2005

merci, vraiment cette solution m'a aidé mais j'ai changer un peu mon pg, au lieu des tableaux j'ai utilisé des ArrayList...



ArrayList a1 = new ArrayList();


StringTokenizer tok = new StringTokenizer(ligne,":"+"
"+"/"+">"+"-"+"%");

while (tok.hasMoreTokens()) {


a1.add(tok.nextToken());

}

et puis j'ai crée un autre tableau qui ne va contenir que les champs nécessaire

moi aussi j'essayé et ça marche...

merci pour ton aide car au début j'ai oublié d'initialiser les tableaux
et de declarer les variables au dehors de la boucle while



merci,
Messages postés
3
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
15 novembre 2005

j'ai une chaine de caractères que je veux découper en plusieurs mots et la stocker dans un tableau de String.


Voici la chaine à découper:



<6> "2005-11-10 10:30:18","529955969","172.28.10.242","Packet filter","Notification","New connection","Allow","TCP","172.28.16.2","217.146.176.102","21788","80","4950",,,,,,"NIC #2",,,,,,,,,,,,,,"FW_INT2",,,,,,,,,,,,,,"FW_EXT2",,"0", was reset by client",






la méthode qui fait le découpage est la suivante


void decoupage(String ligne){
String [] param =new String[100];
StringTokenizer mot = new StringTokenizer(ligne," " "); //je teste sur le delimiteur "
int j=0;
String s=new String();
while (mot.hasMoreTokens())
{
s =mot.nextToken();
param[j]=s;

if ((param[j] == ","))
{
s =mot.nextToken();
param[j]=s;
if ((param[j] == ","))
param[j]="vide";
}
System.out.println("param["+j+"]= "+ param[j]);
j++; } }



je ne veux pas stocker les virgules dans le tableau et lorsque je reçois plusieurs virgules à la file je met la chaine vide ds le tableau



mon pb est que la boucle en rouge ne marche pas et le pg stocke les virgules dans le tableau






merci d'avance.
Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007

slt. j'ai un gros probleme avec ta chaine. Elle est tres bizarre. Elle ne peut pas rentrer dans une string tel qu'elle est. Donne moi plutot ce que contient le string ligne si tu veux plus d'aide. En theorie, tu ne devrais pas avoir autant de " " .


Si t'as pas besoin d'ecrire vide quand il y a deux virgule cote a cote, t'as qu'a modifier ton tokenizer:

StringTokenizer mot = new StringTokenizer(ligne," "+" ",");


Belette32

PS : pense a m'envoye exactement ce que contient ta ligne.
Messages postés
57
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
22 novembre 2007

MERDE !!!!!!!

StringTokenizer mot = new StringTokenizer(ligne," " "+",");

Voila c'est mieux. C'était un peutrop petit pour moi.

Belette32