Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [PHP] - Estrapolare dati da file TXT

  1. #1

    [PHP] - Estrapolare dati da file TXT

    Ciao a tutti,
    sto cercando di estrapolare nel file pizza.txt i vari ingredienti che sono scritti in questo modo:

    pizza.txt

    codice:
    001SUGO______040FUNGHI______002BASILICO_______....
    _ = spazio

    Essendo che i codici 001, 040, 002, ecc... non hanno un ordine, come posso cercarli tramite quei codici? I codici hanno posizioni fisse (es: da 0 a 2 - da 10 a 12 - da 20 a 22 .... da 50 a 52)

    Pensavo di usare la funzione strpos ma non ci vengo a capo. C'è qualche altra funzione in merito che mi sfugge?

    Codice PHP:
    $file fopen("pizza.txt""r");
    $line fgets($file);
    while (!
    feof($file)) {
    $line fgets($file);
    ...
    }
    fclose($file); 
    Grazie per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    516
    strpos funziona bene,devi solo impostare i parametri e il risultato...
    all'incirca tipo il codice che ti scrivo... non l'ho testato...fallo tu..
    codice:
    ...
    $posSugo=strpos($line,"001");
    $posFunghi=strpos($line,"040");
    $posBasilico=strpos($line,"002");
    // se devi caricarli..
    if ($posSugo!==false) {....}
    if ($posFunghi!==false) {....}
    if ($posBasilico!==false) {....}
    ...
    ciao
    Vic53

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    Puoi usare una regex tipo questa

    /\d{3}[A-Z]*/

    con preg_match_all

  4. #4
    Grazie per le risposte. Ma mi serverebbe più di preciso una cosa del genere: so che in Java, ad occhio e croce, si può fare:

    codice:
    String[] line = new int[]{3,10,3,10,3,10,3,10,....}
    for (int i = 1; i <= 6; i++){
    if (line[i * 2].equals("001")){
    ...........
    }
    }
    Si può fare una cosa simile in PHP?

  5. #5
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,155
    posto che non ho capito cosa tu voglia fare esattamente e che qualsiasi cosa sia la farei diversamente da un for come quello che ti propongo, guarda se questo ti va bene

    [php]
    <?php


    $string = "001SUGO______040FUNGHI____002BASILICO__054ALTRO__ ___";


    $step = 10;
    $end = 3;


    for($start = 0; $start < 60; $start = $start + $step + $end) {
    echo substr($string, $start, $end);
    echo " - ";
    echo substr($string, $start + $end, $step);
    echo "<br />";
    }
    ?>
    [PHP]

  6. #6
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    516
    Il problema è questo:
    E' un file sequenziale a lunghezza fissa o è uno a lunghezza variabile?
    Poi quanti oggetti [codice] ci sono in un record del file ...il record sarebbe la variabile "$line" appena letta in clclo sul file...
    con questi codice che ci fai? li conti in un array?
    Li devi stampare?
    ci fai una elaborazione per fare una pizza?
    Boh ... a me pare manchi il sugo... attento la pizza si brucia...

    Certo che si puo usare il clclo for... in PHP anzi è molto potente.
    Poi a colonna zero per una lunghezza di 3 car. ci sta sempre il sugo oppure ci puo stare qualcosa di altro? E cosi vale per le altre posizioni? Perche se è cosi la prima soluzione che ti ho postato è la piu semplice...
    $posSugo indica la posizione della stringa sugo e questa la ricavi con substr($line,$posSugo,3) ma dato che sai che la stringa SUGO vale 001 che ci fai se gia la conosci... al massimo sai che è presente dato che $posSugo è > zero e puoi contare un piu uno al contatore del SUGO... e così via per gli altri codici
    Be fatti una bella pizza..
    Ciao...
    Vic53

Tag per questa discussione

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 © 2018 vBulletin Solutions, Inc. All rights reserved.