cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 août 2009
-
21 nov. 2007 à 14:12
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 août 2009
-
29 nov. 2007 à 09:58
Bonjour,
je possède un fichier texte qui a cette structure :
# mon routeur 8
define host{
use linux_server
host_name routeur8
alias routeurout
address 192.168.8.1
}
# mon routeur 9
define host{
use linux_server
host_name routeur9
alias routeurin
address 192.168.54.1
}
et en possédant une adresse ip je dois parcourir le fichier et supprimer tout le bloc concernant cette adresse.
j'ai utilisé deux fichiers mais le problème est que il ya des lignes à supprimer avant d'arriver à l'adresse et une ligne par la suite. je lis le fichier en séquentiel normalemnt et je stocke dans un autre fichier.
Donc je ne supprime qu'une ligne et je garde tjs une partie du bloc.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 21 nov. 2007 à 15:13
Salut,
commence par lire ton fichier en te basant sur les blocs soit '{' et '}' tu peux le faire assez simplement à l'aide d'un petit regexp ensuite tu te fais un objet représentant un bloc et tu gagnera ton temp...
voici la regexp que tu peux utiliser :
[...]
//lecture du fichier
StringBuilder builder = new StringBuilder();
final Scanner sc = new Scanner(new FileInputStream(fileName));
while (sc.hasNext())
builder.append(sc.nextLine().trim());
sc.close();
builder.trimToSize();
//préparation de la regexp
final Pattern p = Pattern.compile("\\{[^\\}\\{]*\\}");
Matcher m = p.matcher(builder.toString());int begin 0, end 0;
//parse l'expression
while (m.find()) {
begin = m.start();
end = m.end();
[...]//ici tu commence à analyser le bloque
//prépare pour le prochain bloc
builder = new StringBuilder(builder.substring(end));
m = p.matcher(builder);
}
[...]
si tu veux une idée de ce que tu peux faire, tu peux regarder ce poste ICI
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
KenZara
Messages postés112Date d'inscriptionvendredi 24 décembre 2004StatutMembreDernière intervention20 décembre 2011 21 nov. 2007 à 15:18
Bonjour,
Je vais essayer de récapituler ce que tu veux faire pour mieux comprendre:
Tu as un fichier qui contient par exemple:
define host{
use linux_server
host_name routeur8
alias routeurout
address 192.168.8.1
}
Tu veux que si l'adresse est le 192.168.8.1, supprimer tout le bloc à partir de "define host" jusqu'au " } " ?
Si tel est ton souhait, il y a une facon de faire, c'est de récupérer à chaque fois le bloc en entier dans un String (Donc define host { ......... } ) et voir si ton String contient bien l'adresse que tu cherches, si tel est le cas, tu supprimers le bloc (ou tu ne l'écris pas ds ton nouveau fichier) sinon tu l'ajoutes.
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 août 2009 28 nov. 2007 à 12:43
bonjour,
j'ai essayé de faire en regexp et j'ai juste modifier ton code en ajoutant une partie pour l'analyse du bloc:
try { File file = new File ("/home/user/host.txt");
//lecture du fichier
StringBuilder builder = new StringBuilder();
final Scanner sc = new Scanner(new FileInputStream("/home/user/host.txt"));
while (sc.hasNext())
{
builder.append(sc.nextLine().trim());
}
sc.close();
builder.trimToSize();
//préparation de la regexp
final Pattern p = Pattern.compile("\\{[^\\}\\{]*\\}");
Matcher m = p.matcher(builder.toString()); int begin 0, end 0;
//parse l'expression
BufferedWriter sortiroutt = new BufferedWriter(new FileWriter("/home/user/routeursupp.txt", true));
while (m.find()) {
begin = m.start();
end = m.end();
//analyser le bloc
if(m.equals("192.162.54.150"))
{ // écrire le bloc à supprimer dans un autre fichier
BufferedWriter sortirout = new BufferedWriter(new FileWriter("/home/user/routeur_gardé.txt", true));
sortirout.write(builder.toString()+"\n");
sortirout.close();
}
else {
// écrire le bloc dans un fichier temporaire
sortiroutt.write(builder+"\n");
}
}
sortiroutt.close();
//prépare pour le prochain bloc
builder = new StringBuilder(builder.substring(end));
m = p.matcher(builder);
} catch(java.io.IOException e) {
e.printStackTrace();
}
Le problème est que à la sotie il me retourne un fichier où il y a plusieurs blocs et répétés plusieurs fois. et il n'arrive pas à supprimer le bloc voulu. mais j'arrive pas à voir comment je peux accéder au bloc et l'analyser. j'ai essayé avec bloc.tostring.containes aussi.
merci beaucoup.
Ps: pour l'analyse du bloc j'ai essayé avec bloc.tostring.containes aussi
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ghofrane
Messages postés44Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention11 août 2009 29 nov. 2007 à 09:58
Bonjour,
merci le problème est résolu:
j'ai juste ajouté:
String host = m.group();
if (host.contains("192.168.54.150")) {
// Le bloc contient l'adresse IP que l'on ne veut pas
BufferedWriter sortirout = new BufferedWriter(new FileWriter("/home/user/sup.txt", true));
sortirout.write(host+"\n");
sortirout.close();
} else {....}