Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    Estrarre dati da un file e inserirli in un database mysql

    Salve a tutti, avrei bisogno di un grande aiuto!
    Praticamente ho un file così strutturato

    J CODICE9CIFRE LETTERA NOME PRODOTTO 00002n N.TERMINALE J

    XXXXXXXXX V 0NOME 00001n 03 J
    4F 0017 G 0NOME 00002n 03 J
    <Î 0028 G 0NOME 00001n 02 J
    YÀ 8061 G 0NOME 00001n 04 J J
    %ô 6011 G 0NOME 00001 P 05 J
    5048 G 0NOME 00001n 01 J
    9072 G 0NOME 00002n 05 J
    J XXXXXXXXX V 9NOME 00001n 05 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 02 J
    _Ĝ 5022 G 0NOME 00001n 06 J
    y" 5143 G 0NOME 00002n 04 J
    J XXXXXXXXX V 0NOME 00003n 03 J
    J XXXXXXXXX V 0NOME 00002n 03 J
    J XXXXXXXXX V 0NOME 00001n 05 J
    J XXXXXXXXX V 0NOME 00002n 04 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 04 J


    Io dovrei estrarre tutte le stringhe che hanno la P prima del codice terminale 01-02-03-04-05 ecc..., ed inserirle in un database mysql! Ciò sarebbe ottimo se accadesse al variare del file (ultima modifica) ma andrebbe bene anche se si potesse fare con un click (che ovviamente dovrà solo aggiornare il database e non riscriverlo ad ogni click)
    Ovviamente l'ordine delle stringhe, il numero terminale, il nome prodotto e il codice prodotto sono casuali il numero terminale e la P sono le uniche cose statiche!

    Diciamo che per risolverla in soldoni si dovrebbe ricercare la P con i relativi spazi (prima di quel numero a 5 cifre che non so cosa indichi e dopo la P prima del terminale). In poche parole :
    spazio-spazioPspazio
    Come si puo estrarre il codice a 9 cifre (che non è sempre corretto), il nome prodotto (che è sempre preceduto da un numero) e il numero di terminale?
    GRAZIE
    Ultima modifica di supersqualo; 07-09-2017 a 23:05

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Non è che si capisce molto...cmq se $row è la tua riga di testo puoi vedere se c'è la P così
    Codice PHP:
    $len strlen($row);
    if(
    $row[$len 6] == 'P' && $row[$len 7] == ' '
    Sempre se n. terminale è di sole due cifre.
    Ora se in questa riga il codice è SEMPRE di 9 cifre e quel "numero" prima della P è SEMPRE lungo 5
    Codice PHP:
    $code substr($row29);
    $nome substr($row14$len 28); 
    Se invece codice o il numero prima di P son variabili, invece di starti a trovare gli spazi, potresti fare:
    Codice PHP:
    $tmp explode(' '$row);
    $len count($tmp);
    $code $tmp[1];
    $name implode(' 'array_slice($tmp3$len 7)); 
    PS: le varie constanti potrebbero essere sbagliate. ad esempio potresti perdere l'iniziale / finale del nome se ho fatto male i conti per 14 o 28, quindi in caso aggiusta di conseguenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Risolvibile con una semplice espressione regolare:
    Codice PHP:
    <?php

    $txt 
    = <<<EOL
    J CODICE9CIFRE LETTERA NOME PRODOTTO 00002n N.TERMINALE J

    XXXXXXXXX V 0NOME 00001n 03 J
    4F 0017 G 0NOME 00002n 03 J
    <Π0028 G 0NOME 00001n 02 J
    YÀ 8061 G 0NOME 00001n 04 J J
    %ô 6011 G 0NOME 00001 P 05 J
    5048 G 0NOME 00001n 01 J
    9072 G 0NOME 00002n 05 J
    J XXXXXXXXX V 9NOME 00001n 05 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 02 J
    _Ĝ 5022 G 0NOME 00001n 06 J
    y" 5143 G 0NOME 00002n 04 J
    J XXXXXXXXX V 0NOME 00003n 03 J
    J XXXXXXXXX V 0NOME 00002n 03 J
    J XXXXXXXXX V 0NOME 00001n 05 J
    J XXXXXXXXX V 0NOME 00002n 04 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 04 J
    EOL;

    foreach ( 
    explode"\n"$txt ) as $row ) {
        
    $row trim$row );
        
    preg_match_all'#V\s+(.*?)\s+[0-9]{3,7}\sP#is'$row$m );
        if ( isset( 
    $m][ ] ) ) {
            print 
    $m][ ] . "<br>";
        }
    }
    Si poteva fare anche senza ciclo con una sola espressione regolare, ma non ho tempo di formularne una più complessa...

  4. #4
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Risolvibile con una semplice espressione regolare:
    Codice PHP:
    <?php

    $txt 
    = <<<EOL
    J CODICE9CIFRE LETTERA NOME PRODOTTO 00002n N.TERMINALE J

    XXXXXXXXX V 0NOME 00001n 03 J
    4F 0017 G 0NOME 00002n 03 J
    <Π0028 G 0NOME 00001n 02 J
    YÀ 8061 G 0NOME 00001n 04 J J
    %ô 6011 G 0NOME 00001 P 05 J
    5048 G 0NOME 00001n 01 J
    9072 G 0NOME 00002n 05 J
    J XXXXXXXXX V 9NOME 00001n 05 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 02 J
    _Ĝ 5022 G 0NOME 00001n 06 J
    y" 5143 G 0NOME 00002n 04 J
    J XXXXXXXXX V 0NOME 00003n 03 J
    J XXXXXXXXX V 0NOME 00002n 03 J
    J XXXXXXXXX V 0NOME 00001n 05 J
    J XXXXXXXXX V 0NOME 00002n 04 J
    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 04 J
    EOL;

    foreach ( 
    explode"\n"$txt ) as $row ) {
        
    $row trim$row );
        
    preg_match_all'#V\s+(.*?)\s+[0-9]{3,7}\sP#is'$row$m );
        if ( isset( 
    $m][ ] ) ) {
            print 
    $m][ ] . "<br>";
        }
    }
    Si poteva fare anche senza ciclo con una sola espressione regolare, ma non ho tempo di formularne una più complessa...
    Ciao zacca, sempre qui a risolvere i miei guai
    ho provato su regexr.com l'espressione #V\s+(.*?)\s+[0-9]{3,7}\sP#is incollando il testo di esempio sopracitato ma non mi trova nulla... perdona la mia solita ignoranza ma poi come richiamo i risultati? e peggio ancora come li inserisco in una tabella? Qua non so proprio muovermi

    Grazie anche a te boots ma anche io suppongo che si debba risolvere con un espressione regolare (visto che nel testo sono presenti anche altri elementi che non ho inserito nell'esempio)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    certo perchè #V\s+(.*?)\s+[0-9]{3,7}\sP#is utilizza i delimitatori che sono utili a PHP, se provi V\s+(.*?)\s+[0-9]{3,7}\sP (senza cancelletti e "is" finale ) funziona alla grande su regexr.

    Ogni linguaggio utilizza la sua sintassi per le esperessioni regolari, che può variare leggermente.
    Oltre al fatto che noto che regexr utilizza già i suoi delimitatori //g
    Ultima modifica di zacca94; 08-09-2017 a 15:27

  6. #6
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    certo perchè #V\s+(.*?)\s+[0-9]{3,7}\sP#is utilizza i delimitatori che sono utili a PHP, se provi V\s+(.*?)\s+[0-9]{3,7}\sP (senza cancelletti e "is" finale ) funziona alla grande su regexr.

    Ogni linguaggio utilizza la sua sintassi per le esperessioni regolari, che può variare leggermente.
    Oltre al fatto che noto che regexr utilizza già i suoi delimitatori //g
    Grazie zacca ma purtroppo così non può andare bene non sempre c'è la V prima della stringa da estrarre e poi a me nn serve quel codice (anche se non è poi un gran problema prelevare anche quel codice)! Come puoi vedere c'è anche un altra stringa con la P anche se non l'ho evidenziata ed ha un altra lettera iniziale! quindi non posso sfruttare la lettera

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Scusa ma quale è la stringa da estrarre?

    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 02 J

    Questa in grassetto? O altre?

    Comunque nell'esempio dovresti specificare le casistiche...
    E possibilmente con degli esempi reali così da poter formare una regexp, se gli utenti non sanno da che caratteri e quali spazi sono presenti come fanno a ipotizzare una soluzione?

  8. #8
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Scusa ma quale è la stringa da estrarre?

    J XXXXXXXXX V 9STRINGADAESTRARRE 00001 P 02 J

    Questa in grassetto? O altre?

    Comunque nell'esempio dovresti specificare le casistiche...
    E possibilmente con degli esempi reali così da poter formare una regexp, se gli utenti non sanno da che caratteri e quali spazi sono presenti come fanno a ipotizzare una soluzione?
    Il file è abbastanza incasinato
    Codice PHP:
          &#8221;     ”     “V         l¤    ™ d      ö   ç Ÿ˙ 
    <r      Ş&#8211;     w        î       ˙ú   ”  î    È H  <                                     Ŝ                                                    ´    <    ( 
                                       
    2    <  ( 
                                                                                                                                                                                                                        
    J J 025300029    G       0NORMIX*AD 12CPR RIV 200MG               00002n   01 J J 015896018    G       0MUSCORIL*IM 6F 4MG 2ML                  00001n   03 J    <Π 0028    G       0ULTRALAN DERM*CR IDROFOBA 30G           00001n   01 J    YÀ  8061    G       0MICROSER*30CPR 16MG                     00001n   04 J    J  5048    G       0VALIUM*OS GTT 20ML 5MG/ML               00001n   01 J J 040627010    G       0FOLIFILL*28CPR 5MG                      00001n   01 J J 925633048    V       9PERSONAL TEST PIC 1PZ                   00001n   03 J J 042236036    V       0OMEPRAZOLO TEVA*14CPS 10MG              00002n   02 J    _Ĝ  5022    G       0COLBIOCIN*UNG OFT 5G                    00001n   06 J    y"  5143    G       0TACHIPIRINA*12CPR EFF 1G                00002n   04 J J 036345027    G       0FOLIDEX*120CPR 400MCG                   00001n   01 J J 900472768    G       9ALFA NATURA 10FL MONODOSE               00001n   01 J J 934030913    G       9RUPISOLV 20BUST                         00001  P 04 J J 800218493    G       8IGNATIA AMARA 200K GL                   00001n   04 J J 005170028    G       0TRAVELGUM*10GOMME MAST 20MG             00001n   03 J J 938857568    G       9PLAKKONTROL BRUSH&CLEAN LARGE           00001n   01 J    Ê  7022    G       0BIDIEN*UNG 30G 0,025%                   00001n   01 J    FÜ  4071    G       0DRONAL*4CPR 70MG                        00001n   05 J 
    Io vorrei estrarre il nome del prodotto, il numero terminale (min 01 max 07) e quando compare (perchè non sempre compare) il codice a 9 cifre e inserire questi dati in un database separatamente!
    Ultima modifica di supersqualo; 08-09-2017 a 18:09

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ci sono gli "a capo" (new line "\n") ?

  10. #10
    No, il file è così come lo vedi l' unica cosa statica è la P con due spazi prima e uno dopo (ed è il fattore distintivo ovvero la riga che devo estrarre) e poi c'è il numero terminale che può variare solo da 1 a 7 e se non erro la lettera V o G può essere solo di 6 tipi diversi e dovrebbe corrispondere al grossista il resto è tutto variabile
    Ultima modifica di supersqualo; 08-09-2017 a 18:18

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.