Lecture d'un fichier de définitions (genre INI)
Résolu/Fermé
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
-
25 janv. 2021 à 18:07
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 26 janv. 2021 à 15:48
heliconius Messages postés 539 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 26 janv. 2021 à 15:48
A voir également:
- Lecture d'un fichier de définitions (genre INI)
- Fichier rar - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier host - Guide
- Ouvrir un fichier .bin - Guide
2 réponses
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
Ambassadeur
1 551
25 janv. 2021 à 18:59
25 janv. 2021 à 18:59
bonjour,
pendant que tu étais bloqué, as-tu pris le temps d'observer la valeur de $rubrique après la ligne 24? je pense que cela te permettra de corriger la ligne 24 et d'obtenir le résultat attendu?
en ligne 26, pourquoi n'utilises-tu pas
pendant que tu étais bloqué, as-tu pris le temps d'observer la valeur de $rubrique après la ligne 24? je pense que cela te permettra de corriger la ligne 24 et d'obtenir le résultat attendu?
en ligne 26, pourquoi n'utilises-tu pas
$snetau lieu de
$$rubrique?
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
Ambassadeur
1 551
25 janv. 2021 à 19:58
25 janv. 2021 à 19:58
moi, je ferais ainsi: après la ligne 27, je consommerais toutes les lignes jusqu'à la rubrique suivante.
par ailleurs, si tu persistes dans l'idée de variable dynamique, il me semble indispensable que ta ligne 26 soit identique à ta ligne 19. sinon comment ta ligne 35 peut-elle fonctionner?
ceci me semble donc plus correct (non testé):
par ailleurs, si tu persistes dans l'idée de variable dynamique, il me semble indispensable que ta ligne 26 soit identique à ta ligne 19. sinon comment ta ligne 35 peut-elle fonctionner?
ceci me semble donc plus correct (non testé):
if(eregi("^\[snet[1-9]{1}\]$",$line)) { $num = substr($line,5,1)-1; $rubrique = "snet[".$num."]"; $$rubrique = array(); $line = trim(fgets($hf,1024)); }
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
1 551
25 janv. 2021 à 20:44
25 janv. 2021 à 20:44
plutôt:
et, en ligne 36, utiliser $rubrique, pas $$rubrique;
if(eregi("^\[snet[1-9]{1}\]$",$line)) { $num = substr($line,5,1)-1; $snet[$num] = array(); $rubrique =& $snet[$num]; $line = trim(fgets($hf,1024)); }
et, en ligne 36, utiliser $rubrique, pas $$rubrique;
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
1 551
>
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
25 janv. 2021 à 20:48
25 janv. 2021 à 20:48
il faudra bien sûr faire de même partout:
if(!iscomment($line)) { if(eregi("^\[lan\]$",$line)) { $lan = array(); $rubrique =& $lan; $line = trim(fgets($hf,1024)); }
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
139
>
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
26 janv. 2021 à 01:03
26 janv. 2021 à 01:03
J'ai essayé avec :
et
1) sans toucher à la ligne 36 :
=> écriture de ===: snet[0] et ===: snet[1]
=> la tableau $snet : variable snet non définie
=> les tableaux $lan, $lasn1 et $lasn2 étaient corrects
2) en remplaçant $$rubrique par $rubrique en ligne 36 :
=> même résultat.
3) en homogénéisant pour les rubriques lan, lasn1 et lsan2 :
=> plus rien ne fonctionne.
Vraie prise de tête...
if(eregi("^\[snet[1-9]{1}\]$",$line)) { $num = substr($line,5,1)-1; $rubrique = "snet[".$num."]"; echo "===: $rubrique\n"; $$rubrique = array(); $line = trim(fgets($hf,1024)); }
et
if(eregi("^\[snet[1-9]{1}\]$",$line)) { $num = substr($line,5,1)-1; $snet[$num] = array(); $rubrique =& $snet[$num]; $line = trim(fgets($hf,1024)); }
1) sans toucher à la ligne 36 :
=> écriture de ===: snet[0] et ===: snet[1]
=> la tableau $snet : variable snet non définie
=> les tableaux $lan, $lasn1 et $lasn2 étaient corrects
2) en remplaçant $$rubrique par $rubrique en ligne 36 :
=> même résultat.
3) en homogénéisant pour les rubriques lan, lasn1 et lsan2 :
=> plus rien ne fonctionne.
Vraie prise de tête...
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
1 551
>
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
26 janv. 2021 à 11:26
26 janv. 2021 à 11:26
il faut probablement ajouter en ligne 12:
$snet = array();
heliconius
Messages postés
539
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
23 juin 2023
139
>
yg_be
Messages postés
23327
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 novembre 2024
26 janv. 2021 à 15:48
26 janv. 2021 à 15:48
Problème résolu.
Merci beaucoup pour ton aide. Voici les fichiers (définitions, script) et résultat. J'ai modifié le nom des rubriques pour que ce soit plus clair et modifié la composition des tableaux pour que ce soit plus homogène :
1 réseau local => 1 tableau
X sous-réseaux :
- => 1 tableau de X tableaux de sous-réseau
- => 1 tableau de X tableaux d'hôtes (par sous-réseau)
Fichier INI de définition :
Script de lecture du fichier de définition :
Dump des tableaux :
Merci beaucoup pour ton aide. Question résolue.
Merci beaucoup pour ton aide. Voici les fichiers (définitions, script) et résultat. J'ai modifié le nom des rubriques pour que ce soit plus clair et modifié la composition des tableaux pour que ce soit plus homogène :
1 réseau local => 1 tableau
X sous-réseaux :
- => 1 tableau de X tableaux de sous-réseau
- => 1 tableau de X tableaux d'hôtes (par sous-réseau)
Fichier INI de définition :
# Lan définition # Domaine des papillons (parpaioun.net) # Mis en place le JJ/MM/AAAA [lan] network=192.168.0 mask=255.255.255.0 domain=parpaioun.net dhcpd=vulcain lease=43200 maxlease=86400 dns1=vulcain.parpaioun.net dns2=80.10.246.3 [subnet1] net=192.168.0.0 mask=255.255.255.0 range=192.168.0.2 192.168.0.35 bcast=192.168.0.255 router=192.168.0.1 lasn=lasn1 [subnet2] net=192.168.10.0 mask=255.255.255.0 range=192.168.10.226 192.168.10.230 bcast=192.168.10.255 router=192.168.10.254 lasn=lasn2 [hosts1] # hostname;mac@;ip;role - Réseau local privé netgear;00:0F:B5:B1:B0:28;192.168.0.1;Routeur/Passerelle srv-2;00:00:00:00:00:02;192.168.0.2;Réservé service ... etc ... morpho;C0:FF:D4:B0:B8:C6;192.168.0.8;Hotspot WIFI vulcain;00:60:97:A6:FF:89;192.168.0.9;Serveur FTP/Web local samia;00:01:E6:35:B7:49;192.168.0.10;Imprimante réseau Kallima;B0:6E:BF:2F:CF:B4;192.168.0.11;PC fixe MC zigzag;98:3B:16:18:94:D5;192.168.0.12;Tablette MC hepialus;00:00:00:00:00:13;192.168.0.13;Huawei P30 MC ysandra;3C:CD:5D:83:E0:BC;192.168.0.14;Portable MC ... 192.168.0.15 à 20 : réservé MC ... cypris;00:E0:4C:39:4C:4D;192.168.0.21;PC fixe Pierre ... 192.168.0.21 à 30 : Réservé Pierre ... guest-31 à 35;;192.168.0.31 à 35;Invité [hosts2] # hostname;mac@;ip;role - DMZ du réseau local monarque;01:02:03:04:05:06;192.168.10.226;Serveur Web rethenor;B8:27:EB:85:20:13;192.168.10.227;Serveur FTP ... 192.168.10.228 à 192.168.10.230 : réservé services ...
Script de lecture du fichier de définition :
<?php // file: mkfile.php (26/01/2021) $inputfile = "lan.txt"; $hf = fopen($inputfile, "r"); function iscomment($line) { if(strlen($line) == 0) { return true; } if($line[0] == "#" || $line[0] == ";") { return true; } else { return false; } } // Lecture définitions while(!feof($hf)) { $line = trim(fgets($hf,1024)); if(!iscomment($line)) { if(eregi("^\[lan\]$",$line)) { $rubrique = substr($line,1,-1); $lan = array(); $rubrique =& $lan; $line = trim(fgets($hf,1024)); } if(eregi("^\[subnet[1-9]{1}\]$",$line)) { $num = substr($line,7,1)-1; $subnet[$num] = array(); $rubrique =& $subnet[$num]; $line = trim(fgets($hf,1024)); } if(eregi("^\[hosts[1-9]{1}\]$",$line)) { $num = substr($line,6,1)-1; $hosts[$num] = array(); $rubrique =& $hosts[$num];; $line = trim(fgets($hf,1024)); } $rubrique[] = $line; } } fclose($hf); print_r($lan); // OK print_r($subnet); // OK print_r($hosts); // OK // Avec les données des tableaux, // écriture des fichiers du DNS et du DHCP ?>
Dump des tableaux :
Array ( [0] => network=192.168.0 [1] => mask=255.255.255.0 [2] => domain=parpaioun.net [3] => dhcpd=vulcain [4] => lease=43200 [5] => maxlease=86400 [6] => dns1=vulcain.parpaioun.net [7] => dns2=80.10.246.3 ) Array ( [0] => Array ( [0] => net=192.168.0.0 [1] => mask=255.255.255.0 [2] => range=192.168.0.2 192.168.0.35 [3] => bcast=192.168.0.255 [4] => router=192.168.0.1 [5] => lasn=lasn1 ) [1] => Array ( [0] => net=192.168.10.0 [1] => mask=255.255.255.0 [2] => range=192.168.10.226 192.168.10.230 [3] => bcast=192.168.10.255 [4] => router=192.168.10.254 [5] => lasn=lasn2 ) ) Array ( [0] => Array ( [0] => # hostname;mac@;ip;role - Réseau local privé [1] => netgear;00:0F:B5:B1:B0:28;192.168.0.1;Routeur/Passerelle [2] => srv-2;00:00:00:00:00:02;192.168.0.2;Réservé service [3] => ... etc ... [4] => morpho;C0:FF:D4:B0:B8:C6;192.168.0.8;Hotspot WIFI [5] => vulcain;00:60:97:A6:FF:89;192.168.0.9;Serveur FTP/Web local [6] => samia;00:01:E6:35:B7:49;192.168.0.10;Imprimante réseau [7] => Kallima;B0:6E:BF:2F:CF:B4;192.168.0.11;PC fixe MC [8] => zigzag;98:3B:16:18:94:D5;192.168.0.12;Tablette MC [9] => hepialus;00:00:00:00:00:13;192.168.0.13;Huawei P30 MC [10] => ysandra;3C:CD:5D:83:E0:BC;192.168.0.14;Portable MC [11] => ... 192.168.0.15 à 20 : réservé MC ... [12] => cypris;00:E0:4C:39:4C:4D;192.168.0.21;PC fixe Pierre [13] => ... 192.168.0.21 à 30 : Réservé Pierre ... [14] => guest-31 à 35;;192.168.0.31 à 35;Invité ) [1] => Array ( [0] => # hostname;mac@;ip;role - DMZ du réseau local [1] => monarque;01:02:03:04:05:06;192.168.10.226;Serveur Web [2] => rethenor;B8:27:EB:85:20:13;192.168.10.227;Serveur FTP [3] => ... 192.168.10.228 à 192.168.10.230 : réservé services ... ) )
Merci beaucoup pour ton aide. Question résolue.
25 janv. 2021 à 19:16
Pourquoi je n'utilise pas $snet au lieu de $$rubrique en ligne 27 ? Parce que la ligne 36 qui ajoute la valeur lue utilise $rubrique ( $[$rubrique}[] = $ligne; ) et non $snet. Le principe est bon pour les tableaux à 1 niveau (voir $lan, $lasn1 et $lasn2). le tableau se remplit par la ligne 36. Le problème est les sous-tableaux à la place des lignes...
Modifié le 25 janv. 2021 à 19:59
je me demande comment il se fait que, quand tu exécutes
et que $line contient [snet1],
tu obtiens snet dans $rubrique