Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Perchè mi salta... il confronto del primo elemento delle righe?

    Ho scritto questo codice che mi funziona per un buon 99%
    Nel senso che, come da titolo, non mi controlla come vorrei il primo elemento
    di ciascuna riga...

    Ho guardato e riguardato... ma nulla non riesco a trovarne il motivo...
    Sto diventando pazzo nel cercarlo qualcuno/a lo vede per caso?

    Grazie mille.


    Questo il cod:

    Codice PHP:
    //APRO FILE 1
    $apro fopen("file1.txt""r");
    $file1 fread($aprofilesize("file1.txt")); 
    $chiudo fclose($apro);
    //apro FILE 2
    $apro fopen("file2.txt""r");
    $file2 fread($aprofilesize("file2.txt")); 
    $chiudo fclose($apro); 
    //ESSENDO ENTRAMBE DELLE STRINGHE
    //PER POTER PROCEDERE AL CONFRONTO DEVO PRIMA SCOMPORLE IN ARRAY...
    $arrayFILE1[]= explode(";"$file1);
    $arrayFILE2[]= explode(";"$file2);
    print_r ($arrayFILE1);
    print 
    "
    "
    ;
    print_r ($arrayFILE2);
    //CONFRONTO FRA ARRAY E SWITCH...
    //PER OGNI ELEMENTO (riga) DI FILE1 FAI...
    for ($v 0$v count($arrayFILE1[0]); $v++) { 
    $rigafile1 '$rigafile1'.$v;
    for (
    $k 0$k count($arrayFILE2[0]); $k++) { 
    $rigafile2 '$rigafile2'.$k;
    $rigafile1$arrayFILE1[0][$v];
    $rigafile2$arrayFILE2[0][$k];
    print 
    "

    "
    ;
    print 
    "riga".$v."file1: ".$rigafile1;
    //ogni riga trovata di file1 va scomposta in array per procedere col confronto...
    $arrayrigafile1[]=explode(",",$rigafile1);
    print 
    "
    "
    ;
    print 
    "

    "
    ;
    print 
    "riga".$k."file2: ".$rigafile2;
    //ogni riga trovata di file2 va scomposta in array per procedere col confronto...
    $arrayrigafile2[]=explode(",",$rigafile2);
    print 
    "
    "
    ;
    $result array_intersect($arrayrigafile1[$v], $arrayrigafile2[$k]);
    print 
    count($result);
    print 
    "
    "
    ;
    print_r ($result);
    print 
    "
    "
    ;
    }

    QUESTO MIO CODICE FUNZIONA ALLA GRANDE CONTROLLANDO RICORSIVAMENTE TUTTE LE RIGHE DI FILE1 E FILE2 :-) SOLO CHE...NON MI CONSIDERA MINIMAMENTE I PRIMI ELEMENTI DELLE RIGHE DEI RISPETTIVI 2 FILES...

    es.
    Se in file1.txt ho
    1,2,3,4,5,6
    e in file2.txt ho
    1,5,8,9,10,12

    il risultato x l'analisi di elementi uguali risulta 1 (solo il 5) e non 2 (1 e 5) come dovrebbe in quanto l'1 come primo elemento delle due righe non viene confrontato...



  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    110

    Re: Perchè mi salta... il confronto del primo elemento delle righe?

    Originariamente inviato da freetom
    Ho scritto questo codice che mi funziona per un buon 99%
    Nel senso che, come da titolo, non mi controlla come vorrei il primo elemento
    di ciascuna riga...

    Ho guardato e riguardato... ma nulla non riesco a trovarne il motivo...
    Sto diventando pazzo nel cercarlo qualcuno/a lo vede per caso?

    Grazie mille.


    Questo il cod:

    Codice PHP:
    //APRO FILE 1
    $apro fopen("file1.txt""r");
    $file1 fread($aprofilesize("file1.txt")); 
    $chiudo fclose($apro);
    //apro FILE 2
    $apro fopen("file2.txt""r");
    $file2 fread($aprofilesize("file2.txt")); 
    $chiudo fclose($apro); 
    //ESSENDO ENTRAMBE DELLE STRINGHE
    //PER POTER PROCEDERE AL CONFRONTO DEVO PRIMA SCOMPORLE IN ARRAY...
    $arrayFILE1[]= explode(";"$file1);
    $arrayFILE2[]= explode(";"$file2);
    print_r ($arrayFILE1);
    print 
    "
    "
    ;
    print_r ($arrayFILE2);
    //CONFRONTO FRA ARRAY E SWITCH...
    //PER OGNI ELEMENTO (riga) DI FILE1 FAI...
    for ($v 0$v count($arrayFILE1[0]); $v++) { 
    $rigafile1 '$rigafile1'.$v;
    for (
    $k 0$k count($arrayFILE2[0]); $k++) { 
    $rigafile2 '$rigafile2'.$k;
    $rigafile1$arrayFILE1[0][$v];
    $rigafile2$arrayFILE2[0][$k];
    print 
    "

    "
    ;
    print 
    "riga".$v."file1: ".$rigafile1;
    //ogni riga trovata di file1 va scomposta in array per procedere col confronto...
    $arrayrigafile1[]=explode(",",$rigafile1);
    print 
    "
    "
    ;
    print 
    "

    "
    ;
    print 
    "riga".$k."file2: ".$rigafile2;
    //ogni riga trovata di file2 va scomposta in array per procedere col confronto...
    $arrayrigafile2[]=explode(",",$rigafile2);
    print 
    "
    "
    ;
    $result array_intersect($arrayrigafile1[$v], $arrayrigafile2[$k]);
    print 
    count($result);
    print 
    "
    "
    ;
    print_r ($result);
    print 
    "
    "
    ;
    }

    QUESTO MIO CODICE FUNZIONA ALLA GRANDE CONTROLLANDO RICORSIVAMENTE TUTTE LE RIGHE DI FILE1 E FILE2 :-) SOLO CHE...NON MI CONSIDERA MINIMAMENTE I PRIMI ELEMENTI DELLE RIGHE DEI RISPETTIVI 2 FILES...

    es.
    Se in file1.txt ho
    1,2,3,4,5,6
    e in file2.txt ho
    1,5,8,9,10,12

    il risultato x l'analisi di elementi uguali risulta 1 (solo il 5) e non 2 (1 e 5) come dovrebbe in quanto l'1 come primo elemento delle due righe non viene confrontato...
    Io non vedo la ricorsione in questo programmino. Cmq sia credo ci siano dei problemi nei 2 cicli hai provato a mettere invece che v++, v+1 , cosi anche k...il post icremento forse ti fa perdere qualcosa..per la ricorsione su array usa foreach()

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Mettendo v+1 ecc... al posto di v++ mi si blocca tutto...

    Non credo si tratti di quello...
    Un print_r del risultato della verifica ecco cosa mi evidenzia ad esempio per il controllo tra la riga0file1 e la rigaENNEfile2 dove in questo caso ENNE = 15

    riga0file1: 1,2,3,4,5,6
    riga15file2: 2,3,22,46,61,80
    1
    Array ( [2] => 3 )

    ovvero... [1] => 2 lo salta alla grande accidenti! in quanto il 2 appunto nella rigaENNEfile2 è il primo elemento della stessa...

    Qualcuno mi butta un salvagente...???

    Grazie


  4. #4
    Dati i seguenti file:
    file1.txt:
    1,2,3,4,5,6
    file2.txt:
    98,65,45,67,77
    1,5,8,9,10,12
    l'output del programma è:
    Array ( [0] => Array ( [0] => 1,2,3,4,5,6 ) )
    Array ( [0] => Array ( [0] => 98,65,45,67,77 1,5,8,9,10,12 ) )

    riga0file1: 1,2,3,4,5,6


    riga0file2: 98,65,45,67,77 1,5,8,9,10,12
    1
    Array ( [4] => 5 )
    Perchè non riconosce anche 1 come elemento in comune?
    Semplicemente perchè 1 non esiste nel 2° array.
    se esplodi per ";" la stringa "98,65,45,67,77 1,5,8,9,10,12" diventa:

    Array([0]=>98,[1]=>65,[2]=>45,[3]=>67,[4]=>77 1,[5]=>5,[6]=>8,[7]=>9,[8]=>10,[9]=>12)

    Per risolvere il problema dovrebbe bastare sostituire
    Codice PHP:
    $arrayFILE1[]= explode(";"$file1);
    $arrayFILE2[]= explode(";"$file2); 
    con
    Codice PHP:
    $arrayFILE1[]= explode("\n"$file1);
    $arrayFILE2[]= explode("\n"$file2); 

    edit:
    Originariamente inviato da freetom
    Non credo si tratti di quello...
    Un print_r del risultato della verifica ecco cosa mi evidenzia ad esempio per il controllo tra la riga0file1 e la rigaENNEfile2 dove in questo caso ENNE = 15

    riga0file1: 1,2,3,4,5,6
    riga15file2: 2,3,22,46,61,80
    1
    Array ( [2] => 3 )

    ovvero... [1] => 2 lo salta alla grande accidenti! in quanto il 2 appunto nella rigaENNEfile2 è il primo elemento della stessa...

    Qualcuno mi butta un salvagente...???

    Grazie

    Ma nei file di testo, le righe terminano con un ";"?

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    si terminano con un ;

    Originariamente inviato da DragonOfLight
    Dati i seguenti file:
    file1.txt:

    file2.txt:


    l'output del programma è:


    Perchè non riconosce anche 1 come elemento in comune?
    Semplicemente perchè 1 non esiste nel 2° array.
    se esplodi per ";" la stringa "98,65,45,67,77 1,5,8,9,10,12" diventa:

    Array([0]=>98,[1]=>65,[2]=>45,[3]=>67,[4]=>77 1,[5]=>5,[6]=>8,[7]=>9,[8]=>10,[9]=>12)

    Per risolvere il problema dovrebbe bastare sostituire
    Codice PHP:
    $arrayFILE1[]= explode(";"$file1);
    $arrayFILE2[]= explode(";"$file2); 
    con
    Codice PHP:
    $arrayFILE1[]= explode("\n"$file1);
    $arrayFILE2[]= explode("\n"$file2); 

    edit:


    Ma nei file di testo, le righe terminano con un ";"?
    si terminano proprio in quel modo...

    e infatti l'output print_r è corretto... semprerebbe... :master:

    te lo posto qui di seguito...

    Es...

    Array ( [0] => Array ( [0] => 1,2,3,4,5,6 [1] => ) )
    Array ( [0] => Array ( [0] => 17,24,25,40,58,64 [1] => 16,19,29,34,48,64 [2] => 23,32,38,40,51,71 [3] => 8,25,31,65,87,90 [4] => 17,32,33,50,61,82 [5] => 30,45,66,69,75,80 [6] => 12,14,29,48,49,85 [7] => 9,26,29,31,58,70 [8] => 17,20,48,62,85,90 [9] => 28,32,45,61,63,76 [10] => 40,60,68,72,84,89 [11] => 1,38,47,50,58,65 [12] => 30,46,54,56,72,86 [13] => 17,44,49,60,66,81 [14] => 8,9,17,33,80,86 [15] => 2,3,22,46,61,80 [16] => 27,28,46,48,52,70 [17] => 19,48,61,73,81,83 [18] => 7,30,45,50,55,74 [19] => 25,39,43,46,59,67 [20] => 3,4,7,44,52,89 [21] => 5,7,13,40,52,84 [22] => 15,17,24,31,80,86 [23] => 6,10,22,48,61,65 [24] => 3,31,33,37,52,54 [25] => 24,26,31,39,49,81 [26] => 6,28,32,39,57,85 [27] => 16,21,33,42,52,66 [28] => ) )

    e per quanto riguarda un confronto di esempio...

    riga0file1: 1,2,3,4,5,6


    riga15file2: 2,3,22,46,61,80


    ***1*** dove 1 è la quantità di valori verificati ossia... il solo.. 3 perchè il 2 nella riga15file2 è 1° elemento e non viene considerato.. affatto...

    Intanto... grazie comunque!


  6. #6
    Allora il problema è il seguente:


    Ogni riga nel file termina con ";" ma dopo c'è un carattere di ritorno a capo ("\n").


    quindi una riga di esempio è:

    17,24,25,40,58,64;\n
    16,19,29,34,48,64;\n

    Array ( [0] => Array ( [0] => 17,24,25,40,58,64 [1] => \n16,19,29,34,48,64 ......)

    \n16 è diverso da 16.

    Risolvi il problema effettuando una ripulitura delle righe in fase di esecuzione (tramite la funzione trim).

    es:
    Codice PHP:
    da:
    $arrayrigafile1[]=explode(",",$rigafile1); 

    a:
    $arrayrigafile1[]=explode(",",trim($rigafile1)); 
    In questo modo ti togli di torno tutti i "\n" ed i "\r" (ed eventuali spasi superflui) che potrebbero darti problemi.

  7. #7
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Adesso funzia!!! Non ho parole...

    Anzi si!

    GRAZIE GRAZIE GRAZIE!!!


  8. #8
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Purtoppo quando file1 lo popolo.. con piu righe... non funzia piu come dovrebbe...

    In dettaglio...
    per esempio...

    riga1file1: 1,6,29,79,72,85
    riga1file2: 16,19,29,34,48,64
    ***0***
    Array ( )

    qui ad esempio dovrebbe essere ***1***

    il mancato controllo comincia dalla riga1file1...
    prima sembra funzionare... (per tutta la riga0file1)


    Qui invece si evidenzia un controllo non con la riga1file1 riportata... ma sempre nei confronti della primissima riga0file1 che infatti era 12,18,38,82,76,86 e quindi la corrispondenza col 38 risulta corretta... in quest'ottica...

    riga1file1: 1,6,29,79,72,85 //nella riga che ci si aspetta nel confronto non risulta il 38
    riga2file2: 23,32,38,40,51,71
    ***1***
    Array ( [2] => 38 )


    Secondo te perchè non funzia con più righe su file1?

    Ancora THANKS!


  9. #9
    temo che qualcosa nel codice non vada molto...

    Codice PHP:
    <?php
    //APRO FILE 1
    $apro fopen("file1.txt""r");
    $file1 fread($aprofilesize("file1.txt"));
    $chiudo fclose($apro);
    //apro FILE 2
    $apro fopen("file2.txt""r");
    $file2 fread($aprofilesize("file2.txt"));
    $chiudo fclose($apro);
    //Tolgo l'ultimo ';', così mi evito un elemento dell'array vuoto.
    if (substr($file1,-1)==";")$file1=substr($file1,0,-1);
    if (
    substr($file2,-1)==";")$file2=substr($file2,0,-1);

    //ESSENDO ENTRAMBE DELLE STRINGHE
    //PER POTER PROCEDERE AL CONFRONTO DEVO PRIMA SCOMPORLE IN ARRAY...
    $arrayFILE1explode(";"$file1); //Esplodo File 1 in righe
    $arrayFILE2explode(";"$file2); //Esplodo File 2 in righe

    /*Stampo il contenuto dei 2 array.*/
    print "File1: ";
    print_r ($arrayFILE1);
    print 
    "
    "
    ;
    print 
    "File2: ";
    print_r ($arrayFILE2);
    print 
    "
    "
    ;
    //CONFRONTO FRA ARRAY E SWITCH...
    //PER OGNI ELEMENTO (riga) DI FILE1 FAI...
    for ($v 0$v count($arrayFILE1); $v++) {
     print 
    "********** File 1, Riga $v **********
    "
    ;
     for (
    $k 0$k count($arrayFILE2); $k++) {
      
    $rigafile1trim($arrayFILE1[$v]);
      
    $rigafile2trim($arrayFILE2[$k]);
      print 
    "---------- File 2, Riga $k ----------
    "
    ;
      
    //ogni riga trovata di file1 va scomposta in array per procedere col confronto...
       
    print "riga".$v."-file1: ".$rigafile1."
    "
    ;
       
    $arrayrigafile1=explode(",",$rigafile1);
      
    //ogni riga trovata di file2 va scomposta in array per procedere col confronto...
       
    print "riga".$k."-file2: ".$rigafile2."
    "
    ;
       
    $arrayrigafile2=explode(",",$rigafile2);
      
    /*Scrivi esito confronto*/
       
    print "
    arrayrigafile1:#"
    ;
       
    print_r ($arrayrigafile1);
       print 
    "#
    arrayrigafile2: #"
    ;
       
    print_r ($arrayrigafile2);
       print 
    "#";
       
    $result array_intersect($arrayrigafile1$arrayrigafile2);
       print 
    "
     Numeri Uguali:" 
    .count($result);
       print 
    "
    "
    ;
       
    print_r ($result);
      print 
    "
    ---------------------------------------------------
    "
    ;
     }
     print 
    "
    "
    ;
    }
    ?>
    Modifiche rispetto al tuo codice:
    1.
    $arrayFILE1[]= explode(";", $file1);
    $arrayFILE2[]= explode(";", $file2);
    tolto []

    2.
    $rigafile1= $arrayFILE1[0][$v];
    $rigafile2= $arrayFILE2[0][$k];
    tolto: [0]

    3.
    $arrayrigafile1[]=explode(",",$rigafile1);
    $arrayrigafile2[]=explode(",",$rigafile2);
    tolto []

    4.
    $result = array_intersect($arrayrigafile1[$v], $arrayrigafile2[$k]);
    tolto: [$v] e [$k]

    5. Aggiunto un po di print per il debug

  10. #10
    Questo un output dettagliato del codice originalmente postato da te (ma con la modifica del trim)

    In grassetto ho evindenziato uno dei problemi:


    scrive di lavorare con questi dati:
    riga1 file1: 1,6,29,79,72,85

    ed invece fa il confronto con questi:
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )




    arrayFILE1: Array ( [0] => Array ( [0] => 23,44,54,77,88,99 [1] => 1,6,29,79,72,85 [2] => ) )
    arrayFILE2: Array ( [0] => Array ( [0] => 16,19,29,34,48,64 [1] => 32,23,38,40,51,71 [2] => ) )
    _____________________________________

    riga0 file1: 23,44,54,77,88,99
    riga0 file2: 16,19,29,34,48,64
    --------------------------
    $v=0 - $k=0
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 16 [1] => 19 [2] => 29 [3] => 34 [4] => 48 [5] => 64 )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

    riga0 file1: 23,44,54,77,88,99
    riga1 file2: 32,23,38,40,51,71
    --------------------------
    $v=0 - $k=1
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 32 [1] => 23 [2] => 38 [3] => 40 [4] => 51 [5] => 71 )
    --------------------------
    Uguali: 1
    Det.: Array ( [0] => 23 )
    _____________________________________

    riga0 file1: 23,44,54,77,88,99
    riga2 file2:
    --------------------------
    $v=0 - $k=2
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

    riga1 file1: 1,6,29,79,72,85
    riga0 file2: 16,19,29,34,48,64
    --------------------------
    $v=1 - $k=0
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 16 [1] => 19 [2] => 29 [3] => 34 [4] => 48 [5] => 64 )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

    riga1 file1: 1,6,29,79,72,85
    riga1 file2: 32,23,38,40,51,71
    --------------------------
    $v=1 - $k=1
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 32 [1] => 23 [2] => 38 [3] => 40 [4] => 51 [5] => 71 )
    --------------------------
    Uguali: 1
    Det.: Array ( [0] => 23 )
    _____________________________________

    riga1 file1: 1,6,29,79,72,85
    riga2 file2:
    --------------------------
    $v=1 - $k=2
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

    riga2 file1:
    riga0 file2: 16,19,29,34,48,64
    --------------------------
    $v=2 - $k=0
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 16 [1] => 19 [2] => 29 [3] => 34 [4] => 48 [5] => 64 )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

    riga2 file1:
    riga1 file2: 32,23,38,40,51,71
    --------------------------
    $v=2 - $k=1
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => 32 [1] => 23 [2] => 38 [3] => 40 [4] => 51 [5] => 71 )
    --------------------------
    Uguali: 1
    Det.: Array ( [0] => 23 )
    _____________________________________

    riga2 file1:
    riga2 file2:
    --------------------------
    $v=2 - $k=2
    arrayrigafile1[$v]: Array ( [0] => 23 [1] => 44 [2] => 54 [3] => 77 [4] => 88 [5] => 99 )
    arrayrigafile2[$k]: Array ( [0] => )
    --------------------------
    Uguali: 0
    Det.: Array ( )
    _____________________________________

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.