Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81

    Leggere riga ed estrarre correttamente info

    Salve ragazzi,
    sono un neofita del PHP per cui avrei bisogno di un piccolo aiutino...
    Ho un file contenente i nomi di tutti i giocatori di serie A (ebbene sì, si parla di fantacalcio...). Questo file è così strutturato:

    -------
    PORTIERI
    AMELIA Marco Livorno
    ANTONIOLI Francesco Sampdoria
    DE LUCIA Alfonso Parma

    DIFENSORI
    ZAURI Luciano Lazio
    ZE MARIA José Inter
    ZE RODOLPHO Jose da Silva Livorno

    CENTROCAMPISTI
    AGNELLI Cristian Lecce
    ALMIRON Sergio Bernardo Empoli

    CAMORANESI Mauro German Juventus
    ecc..
    --------

    Sto cercando di creare una funzione che inserisca tali nomi in un db mysql.
    Il mio problema è questo. Leggo riga per riga il file suddetto e non riesco ad inserire CORRETTAMENTE il nome del giocatore. Infatti se faccio un explode(" ", $riga) ottengo un array non sempre corretto.
    Infatti nel caso di Zauri ottengo ZAURI|Luciano|Lazio (vedetelo come campi di array). Se considero invece ZE RODOLPHO ottengo ZE|RODOLPHO|Jose|da|Silva|Livorno invece che ZE RODOLPHO|Jose da Silva|Livorno. La soluzione è quella di utilizzare un diverso delimitatore nel file di testo (un "*" al posto di " ") ma poichè tale file verrà modificato decine di volte, dovrei ogni volta rieditare il testo.
    A questo punto, secondo voi, esiste una funzione standardizzata che mi permetta di leggere correttamente una riga ed ottenere i tre campi desiderati, ovvero COGNOME, NOME e SQUADRA?

    Grazie mille per l'aiuto. Spero di essere stato sufficientemente chiaro.
    Alfio

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81
    Ho pensato ad una funzione intermedia, che vi sottopongo.

    Preso il file di testo originale (così come lo scarico dal sito) faccio leggere, riga per riga, quanti caratteri " " (spazio) ci sono in ogni riga (ovviamente!!!). Se questi sono in numero maggiori di 3, significa che quel nome è fuori standard (quindi penso al Ze Rodolpho o De Sanctis, ecc.)
    A questo punto tiro fuori un elenco con tutti questi nomi fuori standard (così so quanti ce ne sono e soprattutto chi sono...) e riedito il file di testo originale in qualcosa del genere:

    -------
    PORTIERI
    AMELIA|Marco|Livorno|
    ANTONIOLI|Francesco|Sampdoria|
    DE LUCIA|Alfonso|Parma|

    DIFENSORI
    ZAURI|Luciano|Lazio|
    ZE MARIA|José|Inter| //modifico manualmente questo
    ZE RODOLPHO|Jose da Silva|Livorno| //modifico manualmente questo

    CENTROCAMPISTI
    AGNELLI|Cristian|Lecce|
    ALMIRON|Sergio Bernardo|Empoli| //modifico manualmente questo

    CAMORANESI|Mauro German|Juventus| //modifico manualmente questo
    ecc..
    --------

    C'è un po' di lavoro da fare, ma almeno trovo una soluzione.
    Chi mi può aiutare nel creare una delle due funzioni che ho richiesto?

  3. #3
    scusa ma il file ha questa struttura ?

    PORTIERI
    AMELIA Marco Livorno
    ANTONIOLI Francesco Sampdoria
    DE LUCIA Alfonso Parma

    DIFENSORI
    ZAURI Luciano Lazio
    ZE MARIA José Inter
    ZE RODOLPHO Jose da Silva Livorno

    immagino non abbia altre voci al di fuori di PORTIERI DIFENSORI,CENTROCMAPISTI E ATTACCANTI

    con la funzione file http://it2.php.net/manual/it/function.file.php dando in input questo file tu hai in un array ogni singola riga

    $array = array = (
    0 => PORTIERI
    1 => AMELIA Marco Livorno
    2 => Antonioli Francesco Sampdoria
    );

    facendo una bella ricerca con http://it2.php.net/manual/it/function.array-search.php nell'array della parola PORTIERI , CENTROCAMPISTI, ATTACCANTI e DIFENSORI trovi le chiavi in cui sono presenti questi quattro valori e li togli dall'array...

    poi ti resta il problema di dividere le squadre mhm...al momento l'idea "più veloce e semplice" è
    di farti un array di tutte le squadre esistenti...alla fin fine non ci metti molto non sono tantissime

    squadre = array ( Livorno , Sampdoria...ovviamente scritte nello stesso modo in cui sono scritte nel file )

    e poi con un bellissimo e stupendissimo ciclo riscrivi l'array o a questo punto fai ciò che più ti conviene

    for ( $i=0; $i<sizeof($array) ; $i++){
    una bella espressione regolare per trovare la corrispondenza con uno dei valori nell array $squadre
    e riscrivi nello stesso indice il nome però formattato nome|squadra
    }


  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81
    Ciao ellecubo,
    e grazie per la celere risposta... sì, quello che tu mi hai detto di fare, l'ho in parte realizzato in altro modo... infatti riesco a rendere "indipendenti" le parole PORTIERI, DIF, CEN ecc. La cosa che non riesco a fare è quella di unire, per esempio, ZE+RODOLPHO e Jose+ da+Silva e di attribuirli a due variabili differenti, diciamo $cognome e $nome.
    Se ho ben capito quello che tu mi hai suggerito, alla fine mi fai ottenere tutta l'identità del calciatore, ovvero ZE+RODOLPHO+Jose+ da+Silva. Ho "saputo intendere"?

    Ancora mille grazie!!!

  5. #5
    intendo questo

    codice:
    $file = file("test.txt");
    
    $daEliminare = array("PORTIERI","DIFENSORI","CENTROCAMPISTI","ATTACCANTI");
    $perIlDatabase = array();
    $squadre = array("Livorno","Sampdoria","Parma","Lazio","Inter");
    
    foreach ($file as $chiave => $valore){
    	foreach($daEliminare as $value){
    	 if(strcmp($value,trim($valore))==0 || strcmp("",trim($valore))==0)
    		unset($file[$chiave]);
    	}
    }
    echo "L'array al momento è questo : 
    " ;
    echo "<pre>";
    print_r($file);
    echo "</pre>";
    
    foreach ($file as $k => $v){
    	foreach ($squadre as $nomeSquadra){
    		if(eregi("^([a-zA-Z ]*)[a-zA-Z ]+(".$nomeSquadra.")$",trim($v),$regs))
    			$file[$k] = $regs[1]."|".$regs[2];
    			
    	}
    }
    
    echo "L'array finale è questo : 
    " ;
    echo "<pre>";
    print_r($file);
    echo "</pre>";
    L' ho provato su questo file
    codice:
    PORTIERI
    AMELIA Marco Livorno
    ANTONIOLI Francesco Sampdoria
    DE LUCIA Alfonso Parma
    
    DIFENSORI
    ZAURI Luciano Lazio
    ZE MARIA José Inter
    ZE RODOLPHO Jose da Silva Livorno 
    
    CENTROCAMPISTI
    NON LO SO Lazio
    
    ATTACCANTI
    Mi chiamano tonino Livorno
    e mi ha dato questo risultato

    codice:
    L'array al momento è questo :
    
    Array
    (
        [1] => AMELIA Marco Livorno
    
        [2] => ANTONIOLI Francesco Sampdoria
    
        [3] => DE LUCIA Alfonso Parma
    
        [6] => ZAURI Luciano Lazio
    
        [7] => ZE MARIA José Inter
    
        [8] => ZE RODOLPHO Jose da Silva Livorno 
    
        [11] => NON LO SO Lazio
    
        [14] => Mi chiamano tonino Livorno
    )
    
    L'array finale è questo :
    
    Array
    (
        [1] => AMELIA Marco|Livorno
        [2] => ANTONIOLI Francesco|Sampdoria
        [3] => DE LUCIA Alfonso|Parma
        [6] => ZAURI Luciano|Lazio
        [7] => ZE MARIA José Inter
    
        [8] => ZE RODOLPHO Jose da Silva|Livorno
        [11] => NON LO SO|Lazio
        [14] => Mi chiamano tonino|Livorno
    )

  6. #6
    mhm mi ero dimenticato delle lettere accentate...mhm
    vabbè sostituisci così
    codice:
    if(eregi("^([a-zA-Z òàèùéì]*)[a-zA-Z ]+(".$nomeSquadra.")$",trim($v),$regs))
    pezzotto ma penso risolva

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81
    Originariamente inviato da ellecubo

    L'array finale è questo :

    Array
    (
    [1] => AMELIA Marco|Livorno
    [2] => ANTONIOLI Francesco|Sampdoria
    [3] => DE LUCIA Alfonso|Parma
    [6] => ZAURI Luciano|Lazio
    [7] => ZE MARIA José Inter

    [8] => ZE RODOLPHO Jose da Silva|Livorno
    [11] => NON LO SO|Lazio
    [14] => Mi chiamano tonino|Livorno
    )
    Elle, sei mitico e soprattutto utilissimo... xò non siamo ancora riusciti ad intenderci sull'obiettivo finale. Infatti quello che ho quotato è effettivamente quello che io avevo capito ma non volevo.
    Vediamo se riesco ancora a spiegarmi meglio.Vorrei fare questo:

    1. inizio un ciclo while che legge il file, riga per riga.
    2. ogni riga la inserisco in un array di massimo tre campi, ottenendo una cosa di questo tipo (es. di Ze Rodolpho):
    [0] => ZE RODOLPHO
    [1] => Jose da Silva
    [2] => Livorno
    Ecco, questo non avviene. Con il mio script (che ti posto nel successivo 3d) ottengo un array con 6 elementi, ovvero:
    [0] => ZE
    [1] => RODOLPHO
    [2] => Jose
    [3] => da
    ecc.
    3. Il ciclo while continua e riempie i campi dell'array "tri-dimensionale" con i valori del calciatore successivo.

    Ti prego, dimmi se sono riuscito a spiegarmi!!!


    Ciao e mille grazie!!!

  8. #8
    io ho capito ma un so come aiutarti

    ti do sostegno morale

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81
    Ed infine, questo è il codice al momento:

    codice:
    <?php
    $filename = 'LISTA_GIO_A.txt';
    
    if (file_exists($filename)) {
    	$handle = fopen("$filename", "r");
    	while (!feof($handle)) {
       		$buffer = fgets($handle);
       		switch (TRIM($buffer)){
       			case ('PORTIERI'):
    				$ruolo = "POR - 0";
    				echo $ruolo;
    				break;
       			case ('DIFENSORI'):
    				$ruolo = "DIF - 1";
    				echo $ruolo;
    				break;
       			case ('CENTROCAMPISTI'):
    				$ruolo = "CEN - 2";
    				echo $ruolo;
    				break;
       			case ('ATTACCANTI'):
    				$ruolo = "ATT - 3";
    				echo $ruolo;
    				break;
    			case (''):
    				break;
    			default:  //QUESTA E' LA PARTE INCRIMINATA!!!
    				$player = explode(" ", $buffer);
    				echo $player[0];
    				echo $player[1];
    				echo $player[2];
    				break;
       		}
       		echo "
    ";
       	}
    	fclose($handle);
    } else {
       echo "Il file $filename non esiste";
    }
    ?>
    Come vedi, se nel testo txt ci fossero le parti ben delineate da un delimitatore come "|" il mio problema sarebbe già risolto!!!

    Elle, confido in te...

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    81
    Originariamente inviato da StErMi
    io ho capito ma un so come aiutarti

    ti do sostegno morale
    Ciao amico,
    e grazie anche a te... soprattutto per il supporto morale... è importante!!!
    Cmq, sto seriamente pensando che la "soluzione intermedia" da me esposta nella seconda risposta di codesto 3d è quella che più mi potrebbe risolvere il problema.
    E' un passaggio in più, ma quanto meno non devo creare complicatissimi script.
    Ora come ora sto sviluppando la funzione "contaspazi". Vi terrò aggiornati!!!

    Mitici forum... grazie di eistere!!!

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.