PHP analyse de fichiers texte
                    
        
     
             
                    mmoussouni
    
        
    
                    Messages postés
            
                
     
             
            339
        
            
                                    Statut
            Membre
                    
                -
                                     
mmoussouni Messages postés 339 Statut Membre -
        mmoussouni Messages postés 339 Statut Membre -
        Bonjour,
Je souhaite faire un site en HTML-PHP-CSS pour télécharger et se renseigner sur les paquets dpkg. Je dispose fichiers d'index de ce type : (plusieurs paquets par fichiers séparé par un saut de ligne double)
Je souhaiterais créer une classe "apt" (ligne package) contenant les variables texte priority, section, installed-size, maintainer, ... et les listes de texte depends, recommends, suggests, conflicts, ...
Le résultat ressemblerait à ça : https://packages.ubuntu.com/fr/natty/apt
Merci d'avance.
            
            
                
            
                
    
    
    
        Je souhaite faire un site en HTML-PHP-CSS pour télécharger et se renseigner sur les paquets dpkg. Je dispose fichiers d'index de ce type : (plusieurs paquets par fichiers séparé par un saut de ligne double)
Package: apt Priority: important Section: admin Installed-Size: 6204 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: APT Development Team <deity@lists.debian.org> Architecture: i386 Version: 0.8.13.2ubuntu2 Replaces: manpages-pl (<< 20060617-3~) Provides: libapt-pkg4.10 Depends: libc6 (>= 2.8), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.5), zlib1g (>= 1:1.2.2.3) Recommends: ubuntu-keyring, gpg Suggests: aptitude | synaptic | wajig, dpkg-dev, apt-doc, bzip2, lzma, python-apt Conflicts: python-apt (<< 0.7.93.2~) Filename: pool/main/a/apt/apt_0.8.13.2ubuntu2_i386.deb Size: 2100008 MD5sum: 74511271a1636702bdff86679b7bf1f8 SHA1: 307098d2526624d76663e546a03ce49df6e4556c SHA256: 17b4618512937027c33593f8b3eb7741d8dc694a9e940bdd9e2b512088c0cad7 Description: Advanced front-end for dpkg This is Debian's next generation front-end for the dpkg package manager. It provides the apt-get utility and APT dselect method that provides a simpler, safer way to install and upgrade packages. . APT features complete installation ordering, multiple source capability and several other unique features, see the Users Guide in apt-doc. Bugs: https://bugs.launchpad.net/ubuntu/+filebug/+login Build-Essential: yes Origin: Ubuntu Supported: 18m Task: minimal
Je souhaiterais créer une classe "apt" (ligne package) contenant les variables texte priority, section, installed-size, maintainer, ... et les listes de texte depends, recommends, suggests, conflicts, ...
Le résultat ressemblerait à ça : https://packages.ubuntu.com/fr/natty/apt
Merci d'avance.
        A voir également:         
- PHP analyse de fichiers texte
- Analyse composant pc - Guide
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Transcription audio en texte word gratuit - Guide
3 réponses
                        
                    est ce que tu veux extraire en php les données texte de ce fichier ? si oui c'est possible par une expression régulière ... et je peux te le faire, sinon je ne sais pas...
                
                
    
                
                        
                    le probleme c'est que les 4 fichiers font plus d'un million de lignes. Mais j'ai trouvé, avec un problème : j'ai du augmenter la limite de mémoire vive maximale pour php, ainsi que le temps d'éxecution maximal.
Résumé : La page devrait extraire ce qui est placé à droite des ":" et le placer dans le champ MySQL correspondant à ce qui est à gauche.
Code actuel (commenté) :
C'est un peu (beaucoup) chaotique mais ca marche. Reste à améliorer le temps d'éxecution et la mémoire utilisée.....
                
                
    
                Résumé : La page devrait extraire ce qui est placé à droite des ":" et le placer dans le champ MySQL correspondant à ce qui est à gauche.
Code actuel (commenté) :
<?php
include('../resources/functions.php');
is_admin(1);									// Pour l'intégration future //
$alert=fopen('../resources/updating.env','r+');	          // Permet au site de se couper lors de la maj de la db //
fwrite($alert,'TRUE ');
connect_db();                   // On comprends... //
$table=array('natty_main_binaryi386','natty_multiverse_binaryi386','natty_restricted_binaryi386','natty_universe_binaryi386');
$champs=array("package","priority","section","installed_size","maintainer","original_maintainer","architecture","version","replaces","provides","depends","recommends","suggests","conflicts","filename","size","md5","sha1","sha256","description","bugs","build_essential","origin","supported","task","homepage",);
$champs_r=array("Package","Priority","Section","Installed-Size","Maintainer","Original-Maintainer","Architecture","Version","Replaces","Provides","Depends","Recommends","Suggests","Conflicts","Filename","Size","MD5sum","SHA1","SHA256","Description","Bugs","Build-Essential","Origin","Supported","Task","Homepage");
for($k=0;$k<count($table);$k++)
{
	$index=fopen('../resources/index/'.$table[$k],'r');
	req_sql('DELETE FROM '.$table[$k]);                // Ma fonction de requete MySQL qui gère aussi les erreurs //
	$nb_l=count(file('../resources/index/'.$table[$k]));
	echo('Nombre de lignes l : '.$nb_l.'<br />');
        $nb_c=count($champs);
	for($j=0;$j<$nb_c;$j++)
	{
		${$champs[$j]}=NULL;
	}
	for($i=0;$i<$nb_l;$i++)
	{
		$temp=fgets($index);
		$temp=rtrim($temp);
		$temp=str_replace('\'','-',$temp);
		$temp=str_replace('"','-',$temp);
		if(strlen(rtrim($temp))==0)
		{
			req_sql('INSERT INTO '.$table[$k].' VALUES("","'.$package.'","'.$priority.'","'.$section.'","'.$installed_size.'","'.$maintainer.'","'.$original_maintainer.'","'.$architecture.'","'.$version.'","'.$replaces.'","'.$provides.'","'.$depends.'","'.$recommends.'","'.$suggests.'","'.$conflicts.'","'.$filename.'","'.$size.'","'.$md5.'","'.$sha1.'","'.$sha256.'","'.$description.'","'.$bugs.'","'.$build_essential.'","'.$origin.'","'.$supported.'","'.$task.'","'.$homepage.'")');
			for($j=0;$j<$nb_c;$j++)
			{
				${$champs[$j]}=NULL;
			}
		}
		else
		{
			if(preg_match('/:/i',$temp))
			{
				$ligne=explode(':',$temp,2);
				for($j=0;$j<$nb_c;$j++)	
				{
					if($ligne[0]==$champs_r[$j])
					{
						${$champs[$j]}=$ligne[1];
						$bfr=$champs[$j];
					}
				}
			}
			else
			{
				${$bfr}=${$bfr}.' '.$temp;
			}
		}
	}
	fclose($index);
}
fseek($alert,0);
fwrite($alert,'FALSE');
fclose($alert);
mysql_close();
echo("<br />ok");
?>
C'est un peu (beaucoup) chaotique mais ca marche. Reste à améliorer le temps d'éxecution et la mémoire utilisée.....
