Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Gestione file...

  1. #1

    Gestione file...

    Salve,
    avrei bisogno di un consiglio per quanto concerne la gestione file mediante codice php

    ho questo problema :

    ho un file che chiamiamo test.txt che contiene dati strutturati in questo modo :

    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:52 00:0
    giuseppe:11:v23:S13.0E:200:512:6e0:576:0:3401:318: 5200:0
    pippo:11:v23:S13.0E:200:512:650:5436:0:3401:318:5200:0
    carlo:11:v23:S13.0E:200:51232:650:576:0:3401:318:5 200:0
    gino:11:v23:S13.0E:200:232:650:576:0:3401:318:5200 :0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0

    etc etc
    una volta letto il suo contenuto con questo codice :

    codice:
    $conf = array(); 
    if(!$p_file=fopen($upload_dir."/".$file_name,"r")){
    
    echo "Spiacente, non posso aprire il file ". $_FILES["upfile"]["name"];
    } else {
    while(!feof($p_file))
    {
    $linea = fgets($p_file, 255);
    $conf[] = $linea;
    
    }
    $conftot = implode($conf);
    
    fclose($p_file);
    }
    Avrei la necessità di controllare se come nell'esempio postato su per

    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:520 0:0..

    se è presente la stessa riga più volte cambiare il suo valore finale 0 in 1 e se ancora presente una medesima riga in 2 e cosi via e poi salvare il file con le modifiche apportate

    nell'esempio postato su dovrei ottenere :

    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:52 00:0
    giuseppe:11:v23:S13.0E:200:512:6e0:576:0:3401:318: 5200:0
    pippo:11:v23:S13.0E:200:512:650:5436:0:3401:318:5200:1
    carlo:11:v23:S13.0E:200:51232:650:576:0:3401:318:5 200:0
    gino:11:v23:S13.0E:200:232:650:576:0:3401:318:5200 :0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:2

    etc etc

    è possibile realizzarlo?

    io avrei pensato di inserire i risultati della fgets in un array assegnare ad una variabile tramite implode il contenuto dell'array e gestire la cosa con strstr e poi modificare con una preg_replace ? ma come posso confrontare se in un array è presente lo stesso valore più volte e modificarne il contenuto nel mio caso con un counter finale?

    consigli?

    Grazie
    In God We Trust

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    semplice

    Codice PHP:
    <?php
    $tmp
    =array();
    $utenti=file('xxx.txt');
    foreach(
    $utenti as $line)
      {
      
    $blocks=explode(':',$line);
      unset(
    $blocks[count($blocks)-1]);
      
    $username=$blocks[0];

      if (isset(
    $tmp[$username])) $tmp[$username]++;
      else                        
    $tmp[$username]=0;

      
    $blocks[count($blocks)-1]=$tmp[$username];
      echo 
    implode(':',$blocks)."
    "
    ;
      }
    ?>

    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    Ti ringrazio dottwatson

    sembra funzionare.. soltanto perdonami avevo dimenticato di menzionare che nel file in questione sono presenti anche righe separative del tipo :

    :[ ---------------Personale--------------- ]

    quindi ho una struttura del genere:

    :[ ---------------Personale--------------- ]
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:52 00:0
    giuseppe:11:v23:S13.0E:200:512:6e0:576:0:3401:318: 5200:0
    :[ ---------------Personale2--------------- ]
    pippo:11:v23:S13.0E:200:512:650:5436:0:3401:318:5200:0
    carlo:11:v23:S13.0E:200:51232:650:576:0:3401:318:5 200:0
    :[ ---------------Personale3--------------- ]
    gino:11:v23:S13.0E:200:232:650:576:0:3401:318:5200 :0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    e con lo script mi ritrovo convertiti

    :[ ---------------Personale--------------- ] in 11 12 etc.. in questo modo :

    11
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:0
    giuseppe:11:v23:S13.0E:200:512:6e0:576:0:3401:318: 0
    12
    pippo:11:v23:S13.0E:200:512:650:5436:0:3401:318:1
    carlo:11:v23:S13.0E:200:51232:650:576:0:3401:318:0
    13
    gino:11:v23:S13.0E:200:232:650:576:0:3401:318:0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:2
    e mi ritrovo il penultimo valore cancellato per ogni riga esempio da

    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:52 00:0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:5200:0
    ottengo

    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:0
    andrea:11:v23:S13.0E:200:512:650:576:0:3401:318:0
    pippo:11:v23:S13.0E:200:512:650:576:0:3401:318:1

    ho perso il valore 5200


    mentre il valore finale è stato corretto..

    un ultima cosa se non rompo troppo

    alla fine per poter risalvare il tutto in un file magari in formato txt unix è possibile?

    Ciao e Grazie Ancora
    In God We Trust

  4. #4
    Ok ho risolto in questo modo :

    codice:
    $dfx=array();
    $conf=file($upload_dir."/".$file_name);
    foreach($conf as $line)
      {
      $blocks=explode(':',$line);
     if (substr($blocks[count($blocks)-1], 0, 1) != "[") {
      $biondo=$blocks[0]; 
      if (isset($dfx[$biondo])) $dfx[$biondo]++;
      else                        $dfx[$biondo]=0;
      $blocks[count($blocks)-1]=$dfx[$biondo];
      echo implode(':',$blocks)."
    ";
      } 
      else {
    $biondo=$blocks[0];
    echo implode(':',$blocks)."
    ";
      } 
    }
    Ciao
    In God We Trust

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.