PHP import, conversion, traitement txt, texte
                    
        
     
             
                    cdev
    
        
    
                    Messages postés
            
                
     
             
            3
        
            
                                    Statut
            Membre
                    
                -
                                     
cdev Messages postés 3 Statut Membre -
        cdev Messages postés 3 Statut Membre -
        Bonjour, je suis en formation et je bloque sur un problème malgré mes recherches sur plusieurs forums
 
J'ai un fichier "source.txt" qui comtient les lignes suivantes :
ligne1compteA000100
ligne2compteB000200
ligne3compteB000300
ligne4compteC001000
il se lit comme ça :
la "ligne 1" référence le "compteA" pour un montant de "000100"
la "ligne 2" et la "ligne3" référencent toutes les deux le "compteB" pour 2 montants respectivement "000200" et "000300"
la "ligne 4" référence le "compteC" pour un montant de "001000"
Je doit fournir après conversion un fichier "destination.txt" qui sera sous cette forme :
ligne1compteA000100
ligne2compteB000500
ligne3compteB000200
ligne4compteB000300
ligne5compteC001000
En fait :
si un compte apparait plusieurs fois, je doit effectuer le calcul des montants et écrire une ligne supplémentaire avec la somme sur une ligne avant de ré-écrire ensuite chacune des lignes originales ayant servies au calcul
Si un compte n'apparait qu'une fois je ré-écrit la ligne telle quelle.
J'ai commencé avec ce script :
J'arrive ainsi à générer le fichier de destination (dans cet exemple c'est un clone de la source mais en réalité les positions changent pour chaque valeur et des informations sont ajoutés en fonctions de différents tests)
Comment est-ce que vous vous y prendriez pour détecter les comptes en doublons, stocker les montants correspondants, faire la somme et écrire une ligne avec cette somme avant de ré-écrire chacune des lignes ayant servies au calcul ?
Merci d'avance si vous trouver le temps de m'indiquer des pistes ou des exemples !
            
            
                
            
                
    
    
    
        J'ai un fichier "source.txt" qui comtient les lignes suivantes :
ligne1compteA000100
ligne2compteB000200
ligne3compteB000300
ligne4compteC001000
il se lit comme ça :
la "ligne 1" référence le "compteA" pour un montant de "000100"
la "ligne 2" et la "ligne3" référencent toutes les deux le "compteB" pour 2 montants respectivement "000200" et "000300"
la "ligne 4" référence le "compteC" pour un montant de "001000"
Je doit fournir après conversion un fichier "destination.txt" qui sera sous cette forme :
ligne1compteA000100
ligne2compteB000500
ligne3compteB000200
ligne4compteB000300
ligne5compteC001000
En fait :
si un compte apparait plusieurs fois, je doit effectuer le calcul des montants et écrire une ligne supplémentaire avec la somme sur une ligne avant de ré-écrire ensuite chacune des lignes originales ayant servies au calcul
Si un compte n'apparait qu'une fois je ré-écrit la ligne telle quelle.
J'ai commencé avec ce script :
// ouverture du fichier source :
// nom du fichier :
$fichier="source.txt";
// emplacement :
$open_fichier = fopen($fichier,"r");
// lecture par ligne :
$lines = file('source.txt');
// pour séparer les données sans séparateur, j'utilise la fonction substr avec des position et des longueurs que je défini au préalable :
$position_ligne = '0';
$longueur_ligne = '6';
$position_compte = '7';
$longueur_compte = '7';
$position_montant = '14';
$longueur_montant = '6';
// ensuite je lance ma boucle de lecture :
// initialisation d'un compteur :
$i=0;
// tant qu'il y une ligne dans le fichier source :
while($ligne=fgets($open_fichier,100000000))
{
	// enregistrement de la première valeur de chaque ligne :
	$src_ligne[$i] = substr($lines[$i], $position_ligne, $longueur_ligne);
	// enregistrement de la première valeur de chaque ligne :
	$src_compte[$i] = substr($lines[$i], $position_compte, $longueur_compte);
	// enregistrement de la première valeur de chaque ligne :
	$src_montant[$i] = substr($lines[$i], $position_montant, $longueur_montant);
	
	// écriture du fichier de destination :
	// definition du nom du fichier :
	$fichier_dest="destination.txt";
	// ouverture du fichier :
	$fichier_ouvert = fopen($fichier,"a");
	// verrouillage du fichier :
	flock($fichier_ouvert,2);
	// ecriture :
	fwrite($fichier_ouvert, "\n".$src_ligne[$i] .$src_compte .$src_montant);
	// déverouillage du fichier :
	flock($fichier_ouvert,3);
	// fermeture
	fclose($fichier_ouvert);
	// incrémentation :
	$i++;
}
J'arrive ainsi à générer le fichier de destination (dans cet exemple c'est un clone de la source mais en réalité les positions changent pour chaque valeur et des informations sont ajoutés en fonctions de différents tests)
Comment est-ce que vous vous y prendriez pour détecter les comptes en doublons, stocker les montants correspondants, faire la somme et écrire une ligne avec cette somme avant de ré-écrire chacune des lignes ayant servies au calcul ?
Merci d'avance si vous trouver le temps de m'indiquer des pistes ou des exemples !
        A voir également:         
- PHP import, conversion, traitement txt, texte
- Traitement de texte gratuit - Guide
- Ce logiciel gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
4 réponses
                        
                    Perso, je  procèderai de la manière suivante :
- 1 : Je liste le contenu de mon fichier source et stock les valeurs dans un tableau. c'est dans cette phase qu'on peut détecter s'il y a plusieurs ligne pour un compte, par exemple tu te sers de l'identifiant compte comme clé d'index de ton tableau. Tu effectues le traiements adéquat ( ton addition ) et tu continues a lire ton fichier.
- 2 : Tu déroules ton tableau et tu écris ton fichier de sortit avec les valeurs qui sont dans ton tableau.
    
                - 1 : Je liste le contenu de mon fichier source et stock les valeurs dans un tableau. c'est dans cette phase qu'on peut détecter s'il y a plusieurs ligne pour un compte, par exemple tu te sers de l'identifiant compte comme clé d'index de ton tableau. Tu effectues le traiements adéquat ( ton addition ) et tu continues a lire ton fichier.
- 2 : Tu déroules ton tableau et tu écris ton fichier de sortit avec les valeurs qui sont dans ton tableau.
                        
                    Merci pour la réponse, je m'oriente effectivement vers un tableau qui enregistrerais le contenu du fichier texte mais je n'arrive pas encore à lire chaque valeur de chaque ligne du fichier source et à les placer dans un tableau multidimensionnel. Aurais-tu un exemple de script pour faire ça sur la base de l'exemple du .txt ci-dessus que j'adapterais ensuite à mon fichier réel ?
                
                
    
                
                        
                    allez, j'ai un truc sous la main, a adapter si t'as pas de délimiteur, vaudra mieux passer par fread que fgetcscv : 
                
                
    
                
<?php
define('INPUT_PATH' , './inputs/');
define('INPUTS_DELIMITER', ';');
$sInputFileName   = "ton_fichier_input.txt";
$rHandle               = fopen(INPUT_PATH.$sInputFileName, 'r+');
if(is_resource($rHandle)){
while($aData = fgetcsv($rHandle, 0, INPUTS_DELIMITER) ){
   echo "<pre>Contenu de la ligne courante : ".print_r($aData, true)."</pre>";
}
fclose($rHandle);
}
?>
