Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    modifiche su struttura file per importazione

    Ho un file di testo strutturato in questo formato:

    CODFISCALE_DATA_TIPO*_ORA

    *(due possibili valori "I" o "T". "I" = ingresso - "T" = termine)

    devo verificare che:
    1 Per ogni codfiscale deve esserci un ingresso e un'uscita (se non verificato devo trovare il modo di notificare l'anomalia)
    2 se il punto 1 è verificato fare in modo di mettere L'ora di ingresso e Uscita sulla stessa riga (così da avere le ore lavorative del giorno di un dipendente su un unico rigo) secondo questo formato:


    CODFISCALE_DATA_INGRESSO(ora)_USCITA(ora)

    ps. il file viene incrementato giornalmente con tutte le date del mese corrente fino alla data ordierna

    es. il file aggiornato al 10 feb contiene tutti gli orari di ingresso e uscita dei dipendenti dall 1 feb al 10 fino all ora X di esportazione.

    il mio scopo è di importare su db secondo un formato "pulito" tipo il punto 2.

    ho dubbi su come gestire i vari controlli e modifiche...importo tutto e agisco su db? utilizzo le espressioni regolari? cerco di agire sul file di testo?

    grazie a tutti

  2. #2
    metti tutto in un array di tipo codice_fiscale => array('data_in','data_out') poi iteri l'array ottenuto dalla lettura del file e controlli che tutte le chiave abbiano data_in/out compilata. Se lo stesso codice fiscale può fare in/out più volte al mese, sarà una struttura tipo

    codice:
    array(
     'codice_fiscale_x' => array(
    
           array('data_in' => '....','data_out'=>'.....'),
           array('data_in'=>'....','data_out'=>'.....')
        )
    ....
    );
    poi tendenzialmente data_in e data_out dovrebbero essere all'interno delle 24 ore a partire da data_in, a meno che i vostri dipendenti non restino anche giorni interi in ufficio senza mai uscire. Ovviamente mentre riempi l'array puoi notare delle discrepanze, tipo "ho data_out ma non ho una data_in" oppure "data_out è due giorni data_in" o cose simili
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    ciao, grazie per la risposta!

    la questione x me è un po complessa...
    non so se sto procedendo bene...
    Codice PHP:
    $sorgente 'dati.txt';  
    $array_righe file($sorgente); 
        
    foreach(
    $array_righe as $key => $tipo)
    {
     list(
    $tipo$data$ora$cf ) = explode("_"$cmd);  
     } 
    ho messo tutto su un array e ho spezzato i vari elementi... ma non ho capito come continuare..

  4. #4
    un'idea buttata giù in un minuto (e quindi non controllata o studiata):
    Codice PHP:
    $sorgente 'dati.txt';   
    $array_righe file($sorgente);  
    $array_appoggio = array();
         
    foreach(
    $array_righe as $key => $tipo

         list(
    $tipo$data$ora$cf ) = explode("_"$cmd);   

         if(!
    array_key_exists($cf,$array_appoggio)
        
    $array_appoggio[$cf] = array();

        switch(
    $tipo){
        case 
    1//cf é entrato
            
    $array_appoggio[$cf][] = array('data_in' => $data,'ora_in' => $ora,'data_out'=>null,'ora_out'=>null);
            break;
        case 
    2//cf è uscito
                        
            //cerco un'entrata senza uscita
            
    if(!$array_appoggio[$cf])
            {
                echo 
    "ho l'uscita ma non ho l'entrata!";
                break;
            }

            
    $f false;
            foreach(
    $array_appoggio[$cf] as &$value)
            {
                if(!
    $value['data_out'])
                {
                    
    $f true;
                    
    $value['data_out']=$data;
                    
    $value['ora_out']=$ora;
                    break;
                }
            }        

            if(!
    $f)
                echo 
    "ho l'uscita ma non ho l'entrata!!!!";

            break;
        default:
            echo 
    "tipo $tipo sconosciuto";
            break;

        }

    }


    //stampo a video
    foreach($array_appoggio as $cf => $entrateUscite){
        echo 
    "elenco delle entrate/uscite per il cf $cf\n\n";
        foreach(
    $entrateUscite as $entry)
            echo 
    sprintf("entrata: %s - uscita: %s \n",$entry['data_in'].' '.$entry['ora_in'],$entry['data_out'].' '.$entry['ora_out']);

    vedi un pò te se ti piace la cosa
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    ciao!

    grazie mille per l'aiuto che mi stai dando!

    ho un problema..
    eseguendo il codice mi ritrovo questo errore:

    Parse error: syntax error,unspected '$array_appoggio' (T_VARIABLE) in C:\...... on line 11






  6. #6
    Codice PHP:
    if(!array_key_exists($cf,$array_appoggio)) //mancava una tonda
        
    $array_appoggio[$cf] = array(); 
    cmq non è che ho scritto arabo, controlla bene quello che ho scritto e se è compatibile con i tuoi dati...tipo "tipo=1 entrata e tipo=2 uscita" l'ho immaginato io, non so se sono i tuoi di valori
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  7. #7
    ciao!
    grazie ancora per la pazienza
    sto testando e cercando di capire il tuo codice modificandolo un po...il lavoro lo svolge abbastanza bene però ci sono alcune parti non chiare tipo la parte relativa al " CASE 'T' //cf è uscito"...
    procedendo con ordine: ho modificato un po la stampa a video fin qui tt ok
    facendo delle prove se manca un ingresso mi viene stampata la notifica cosi:

    "ho l'uscita ma non ho l'entrata! x il cf: luca "

    se manca l'entrata l'avviso mi viene stampato in questa maniera:

    "entrata: 07/09/2012 07:30 - uscita: ciccio "

    io vorrei raggiungere un risultato del genere:

    codice:
    entrata: N.D. - uscita: 05/04/2012 18:00 luca //ho l'uscita ma nn l'entrata
    entrata: 03/09/2012 07:25 - uscita: 03/09/2012 16:01 marco
    entrata: 04/09/2012 16:10 - uscita: 04/09/2012 16:12 andrea
    entrata: 06/09/2012 07:29 - uscita: 06/09/2012 16:16 gino
    entrata: 07/09/2012 07:30 - uscita: N.D. //ho l'entrata ma nn l'uscita
    ....
    ....
    smanettando ho provato a fare varie modifiche ma niente

    qui il mio codice modificato

    Codice PHP:
    <?php
    $sorgente 
    'orari.txt';   
    $array_righe file($sorgente);  
    $array_appoggio = array();
         
    foreach(
    $array_righe as $key => $tipo

         list(
    $tipo$data$ora$cf ) = explode("_"$tipo);   

         if(!
    array_key_exists($cf,$array_appoggio))
        
    $array_appoggio[$cf] = array();

        switch(
    $tipo){
        case 
    'I'//cf é entrato
            
    $array_appoggio[$cf][] = array('data_in' => $data,'ora_in' => $ora,'data_out'=>null,'ora_out'=>null);
            break;
        case 
    'T'//cf è uscito
                        
            //cerco un'entrata senza uscita
            
    if(!$array_appoggio[$cf])
            {
                echo 
    "ho l'uscita ma non ho l'entrata! x il cf: $cf
    "
    ;
                break;
            }

            
    $f false;
            foreach(
    $array_appoggio[$cf] as &$value)
            {
                if(!
    $value['data_out'])
                {
                    
    $f true;
                    
    $value['data_out']=$data;
                    
    $value['ora_out']=$ora;
                    break;
                }
            }        

            if(!
    $f)
                echo 
    "ho l'uscita ma non ho l'entrata!!! x il cf: $cf
    "
    ;

            break;
        default:
            echo 
    "tipo $tipo sconosciuto";
            break;

        }

    }


    //stampo a video
    foreach($array_appoggio as $cf => $entrateUscite){
        
    //echo "elenco delle entrate/uscite per il cf $cf 

    ";
        foreach(
    $entrateUscite as $entry)
            echo sprintf("
    entrata: %uscita: %
    ",$entry['data_in'].' '.$entry['ora_in'],$entry['data_out'].' '.$entry['ora_out']. ' '.$cf );
    }

    ?>
    e la fonte dati "orari.txt"

    codice:
    I_03/09/2012_07:25_marco
    T_03/09/2012_16:01_marco
    I_04/09/2012_16:10_andrea
    T_04/09/2012_16:12_andrea
    T_05/09/2012_16:03_luca
    I_06/09/2012_07:29_gino
    T_06/09/2012_16:16_gino
    I_07/09/2012_07:30_ciccio
    ps. nel case ho messo I = ingresso, T = termine

    grazie ancora

  8. #8
    dov'è il problema scusa?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.