Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Lettura file multipli

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203

    Lettura file multipli

    Ciao a tutti,

    avrei bisogno di un'aiuto

    ho una cartella con vari file (numero non definito che può andare a 1 a 15 o a 20)

    il nome di ogni file è così formato: username.dati.txt
    dove username può essere pippo o pluto o mario ecc...

    ogni file contiene un numero,

    dovrei aprire ogni singolo file, leggere il numero contenuto e sommarlo
    alla variabile $dati_generali


    come posso fare ?

    Grazie a tutti in anticipo!

  2. #2
    Ciao,

    potresti fare in questo modo:

    Codice PHP:
    $percorso "./file";
    $dir opendir $percorso );
    $dati_generali 0;
    while ( 
    $file readdir $dir ) ) {
        if (
    $file != "." && $file != "..") {
            
    $percorsoFile "$percorso/$file";
            
    $file fopen $percorsoFile"r" );
            
    $num = ( int ) fread $filefilesize $percorsoFile ) );
            
    $dati_generali += $num;
            
    fclose $file );
        }
    }
    echo 
    $dati_generali
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    mmm sbaglierò qualcosa o sarà l'ora
    ma non mi funziona

    dove sbaglio ?

    01122010 sta per la data (giorno mese anno)

    codice:
    <?php
    
    $percorso = "./01122010/";
    $dir = opendir ( $percorso );
    $orelavorate_generali = 0;
    while ( $file = readdir ( $dir ) ) {
        if ($file != "." && $file != "..") {
            $percorsoFile = "$percorso/$file.orelavorate.txt";
            $file = fopen ( $percorsoFile, "r" );
            $num = ( int ) fread ( $file, filesize ( $percorsoFile ) );
            $orelavorate_generali += $num;
            fclose ( $file );
        }
    }
    
    echo $orelavorate_generali;
    
    ?>

    Grazie ancora!

  4. #4
    L'errore lo commetti in questaistruzione:
    Codice PHP:
     $percorsoFile "$percorso/$file.orelavorate.txt"
    $file è già il nome del file presente, quindi dovresti togliere ".orelavorate.txt".
    Se poi nella cartella hai anche altri file che non devi controllare allora puoi aggiungere questa condizione all'if:
    Codice PHP:
    && is_int(strpos($file,"orelavorate.txt"))
    quindi l'if diventerebbe:
    if ($file != "." && $file != ".." && is_int(strpos($file,"orelavorate.txt"))) { 
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  5. #5
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Date le specifiche
    • accesso a file con nome *.dati.txt
    • numero di file variabile ma in quantità limitata
    • ogni file contiene un numero e solo quello

    chiedi di calcolare la sommatoria dei numeri contenuti nei file.

    Prendendo spunto dalla soluzione già proposta e corretta fornita da codencode, aggiungendo un controllo sul file che andiamo a leggere perchè sia quello da specifica e sintetizzando il codice necessario ad otterenre la funzionalità mi è saltato fuori quel che segue

    Codice PHP:
    <?php
    $dati_generali 
    0;
    $percorso "./file/";
    (
    $dir scandir($percorso)) or die("Lettura directory fallita");
    foreach(
    $dir as $file)
        if(
    is_file($percorso.$file) and strpos($percorso.$file,'.dati.txt')!==false)
            
    $dati_generali+=file_get_contents($percorso.$file);
    echo 
    $dati_generali;
    ?>
    Può piacere?

    Se poi invece sei un amante delle funzioni e desideri generalizzare il codice ottengo
    Codice PHP:
    <?php
    /**
     * Legge dalla path specificata tutti i file che rispondono alla regexp
     * prelevandone il contenuto (che deve ssere un numero) e restituendone la
     * sommatoria
     * @param String $path La directory contenente i file
     * @param String $regexp L'espressione regolare utilizzata per la verifica dei nomi file
     * @return int
     */
    function SommaDaFile($path$regexp) {
        
    $somma 0;
        (
    $dir scandir($path)) or die("Lettura directory fallita");
        foreach (
    $dir as $file)
            if (
    is_file($path $file) and preg_match ($regexp$file))
                
    $somma+=file_get_contents($path $file);
        return 
    $somma;
    }

    //Esempio di utilizzo della funzione nel caso in oggetto supponendo che
    //username sia composto di soli caratteri alfabetici e numerici
    echo SommaDaFile("./file/"'/^\w+\.dati\.txt$/');
    ?>
    che fa le stesse identiche cose del codice precedente ma in più ti permette di accedere in modo più mirato ai file di interesse, ignorando gli altri, e su una qualunque cartella.

    Se poi ancora non basta perchè sei un amante della cattura degli errori allora puoi
    Codice PHP:
    <?php
    /**
     * Legge dalla path specificata tutti i file che rispondono alla regexp
     * prelevandone il contenuto (che deve ssere un numero) e restituendone la
     * sommatoria
     * @param String $path La directory contenente i file
     * @param String $regexp L'espressione regolare utilizzata per la verifica deifile
     * @return int
     */
    function SommaDaFile($path$regexp) {
        
    $somma 0;
        if((
    $dir scandir($path))===false)
          throw new 
    Exception("Impossibile leggere il contenuto di $path",1);
        foreach (
    $dir as $file)
            if (
    is_file($path $file) and preg_match ($regexp$file)){
                if((
    $num=file_get_contents($path $file))===false)
                    throw new 
    Exception("Si è verificato un errore nell'accesso al file $file"2);
                
    $somma+=$num;
            }
        return 
    $somma;
    }

    try{
        
    //Esempio di utilizzo della funzione nel caso in oggetto supponendo che
        //username sia composto di soli caratteri alfabetici e numerici
        
    echo SommaDaFile("./file/"'/^\w+\.dati\.txt$/');
    }catch (
    Exception $e){
        die(
    $e->getMessage());
    }
    ?>
    che fa sempre la stessa cosa.

    E poi non so... ma penso sia una buona base per cominciare

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    203
    grazie ragazzi!!

    stasera li provo e vi faccio sapere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.