[PHP] confrontare stringhe importate da csv

Stato
Chiusa ad ulteriori risposte.

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Salve,
sto importando un file csv, riesco a leggere tutto, ma non riesco a confrontarle con le stringhe in php.
Mi faccio capire meglio:
PHP:
// leggo il file e leggo le righe
$columns = explode(';',$riga);
echo $columns[2];  // stampa a video la stringa "GIOCATTOLI"
echo substr($columns[2],0,4);  // mi dovrebbe stampare la stringa "GIOC" ma mi stampa "GI"

infatti non non mi entra mai in questo if
PHP:
if($columns[2]=="GIOCATTOLI")
ho capito che è un problema di codifica di stringhe, ma non riesco a capire di che tipo
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
// mi dovrebbe stampare la stringa "GIOC" ma mi stampa "GI"
questo fa pensare che vi siano spazi non significativi tra il separatore delle colonne ed i valori
giusto per verificare questa tesi, anteponi al trattamento della colonna questo codice,

$columns[2] = trim($columns[2]);

se il risultato é positivo, puoi estendere questo trattamento a tutte le colonne che usi

verifica anche la possibilità di utilizzare "fgetcsv"
http://php.net/manual/en/function.fgetcsv.php
per leggere le righe del file csv e che ti restituisce l'array "ripulita"
 

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Salve,
Si ho provato anche con l'eliminazione degli spazi, il fatto che mi stampa la metà dei caratteri con substr penso sia dovuto alla codifica dei caratteri, mi sono informato e vengono salvati in utf8. Si può convertire utf8 in stringa normale per poterla confrontare?
 

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Ho provato anche con fgetcsv ma il risultato non cambia, la cosa strana è questa:
PHP:
$cat="GIOCATTOLI";
echo substr($cat,0,3); // stampa GIOC, quindi tutto ok
echo $row[2]; // stampa GIOCATTOLI
echo substr($row[2],0,3) // mi stampa G
ho provato anche con utf8_encode e utf_decode ma non cambia nulla.
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
prova a sostituire così,
echo mb_substr($row[2],0,3,'UTF-8');

se non funziona, posta uno zip con alcune righe del file csv, se puoi
 
Ultima modifica:

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Buongiorno,
ho provato ma sempre con lo stesso risultato, ho provato anche ad aprirlo con blocco note e salvarlo in txt ma niente, ti allego il file txt con 3 righe
 

Allegati

  • import.txt
    898 bytes · Visite: 132

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Ho trovato!!!!
Aprendolo con Notepad++ mi dice che la codifica dei caratteri è UCS-2 LE BOM, salvandolo in UTF8 con notepad poi funziona.
Vorrei convertirlo in UTF-8 on in UTF-16 direttamente da PHP se è possibile.
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
puoi usare lo script che ti posto, aggiustandolo per la tua necessità, considera che il tuo esempio,
é stato usato senza conversioni
ha la riga dei titoli (delle colonne) e lo script la vuole
la colonna descrizione ha virgolette che dovrai gestire,
al termine del file vi sono righe vuote che lo script scarta

nello screenshot "empty" identifica le colonne che sono vuote
PHP:
<?php
require_once 'myUtils/show_vars.php';

function loadCSV($file) {

    $arrData = array();                                                        // Create an array to hold the data

    $header = NULL;                                                            // Create a variable to hold the header information

    if (($handle = fopen($file, 'r')) !== FALSE) {                             // If the file can be opened as readable, bind a named resource

        while (($row = fgetcsv($handle,0,';','"')) !== FALSE) {                // Loop through each row

            foreach($row as &$field) {                                         // Loop through each field

                $field = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $field);   // Remove any invalid or hidden characters
            }
            if ($header) {                                                     // If the header has been stored

                if (count($row) > 1) {                                         // Discard empty rows

                    $arrData[] = array_combine($header, $row);                 // Create an associative array with the data
                }
            }
            else {                                                             // Else the header has not been stored

                $header = $row;                                                // Store the current row as the header
            }
        }
        fclose($handle);                                                       // Close the file pointer
    }
    return $arrData;
}

ini_set('auto_detect_line_endings', true);                                     // Auto detect line endings

$data = loadCSV('import.txt');                                                 // Load the CSV and return an associative array

echo "<h1>".substr($data[2]['Categoria'],0,4)."</h1>".show_var($data);         // Check substr and Output the contents of the array
?>

questo é il risultato

upload_2019-2-26_21-5-12.png
 
Ultima modifica:

evilsait83

Nuovo Utente
25 Feb 2019
8
0
1
Gentilissimo, ora provo, ma il file "myUtils/show_vars.php" serve solo per disegnare la tabella?
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
@macus_adi
caro amico hai ragione, ma credo che nessuno possa dire di sviluppare codice senza utilizzare quanto disponibile,

nel mio caso tutto ciò che utilizzo, é stato studiato, analizzato e modificato per renderlo meglio fruibile da me stesso e da chi lo vuole altrettanto utilizzare

tutto ciò che pubblico é sicuramente funzionante e buona parte é tratto dai miei "attrezzi di lavoro"

certo che se ogni volta che viene dato un supporto, credo ben accettato, si debba arrivare ad una disfida tra noi,
mi sembra assurdo

considera che il mio supporto vuole sempre aiutare a risolvere con il minimo "ingombro possibile" ovvero cercando di essere solo efficace

spero che capisci una volta per tutte
non amo il tuo modo di proporti sia nel supporto sia nel voler dimostrare la tua e-Potenza ….
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
grazie per avermi segnalato la pagina,
che non avevo mai vista,
@marino51 basta, è palesemente copiata, persino le variabili sono identiche, tu lavori da molto tempo, quante volte è capitato che 2 programmatori nominino le variabili allo stesso modo???? MAI....
Diamoci un taglio, per correttezza ti ho scritto in privato, ma a te non interessa quindi replico qui....

Logvar TUA:
PHP:
 if (is_array($value) || is_object($value))
    {
        $recursion = FALSE;
        if (is_object($value))
        {
            foreach ($refChain as $refVal)
            {
                if ($refVal === $value)
                {
                    $recursion = TRUE;
                    break;
                }
            }
            array_push($refChain, $value);
        }
Log var di 6 anni fa (oliverSPAMMENOT at e-geek dot com dot au)
PHP:
if (is_array($value) || is_object($value)) {
    $recursion = FALSE;
    if (is_object($value)) {
      foreach ($refChain as $refVal) {
        if ($refVal === $value) {
          $recursion = TRUE;
          break;
        }
      }
      array_push($refChain, $value);
    }
questa parola mi ha fatto capire come risolvere un problema,
dopo aver inserito la riga della profondità nella mia show_var,
ha preso a visualizzare anche gli xml
con grande soddisfazione


Non bisogna leggere altri post per capire come fare se si sa cosa si è scritto e soprattutto il come viene eseguito.....
Cmq il flusso per la risoluzione del problema era abbastanza semplice senza dover leggere alcun post :
Postulato: La funct accetta un OBJ o Array
quindi....
Domanda: Come convertire XML in ARRAY?
.... bastava chiedere...
Soluzione: json_decode(json_encode(simplexml_load_string()));
Qui la documentazione: http://php.net/manual/en/libxml.constants.php
PHP:
$xml=file_get_contents('https://www.w3schools.com/xml/simple.xml');
$my_xml=json_decode(json_encode(simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA)));
show_var($my_xml);
Evitiamo inutili repliche.... e chiedo scusa in anticipo per l'offtopic!
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
E' curioso il tuo astio verso di me,
non ti conosco, non so chi sei, non ho mai avuto affari o rapporti con te
tento di aiutare chi cerca supporto nel forum,
qualunque software io possa usare per supportare le persone penso sia secondario rispetto al risultato
giusto per farti capire, questo software può essere usato anche per inviare le fatture elettroniche ...
e non é copiato da nessuna parte …. caro amico,
upload_2019-3-2_9-41-47.png

upload_2019-3-2_9-42-16.png

ma forse queste cose non le capisci ...
o pensi che mi metta a discutere con te in privato ...
o il tuo e-Pene non é valorizzato a sufficienza ?
(con tante scuse per tutte le persone che leggono questo post)
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
E' curioso il tuo astio verso di me,
.... vabbè..... Tu fai asserzioni ed io rispondo... stop...
Non mi interessa cosa fai e soprattutto il come... Poi se uno non può esprimere la propria...

o pensi che mi metta a discutere con te in privato ...
Questo ti fa sicuramente onore e rende bene l'idea di quanto tu sia spigoloso....

Chi semina vento, raccoglie tempesta non dimenticarlo @marino51

ScusateCI!
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.407
339
83
@macus_adi
@marino51
Ci date un taglio per favore di fare polemiche in ogni discussione che partecipate non fa bene a voi e neanche al forum!
Mi raccomando
Grazie infinite

@evilsait83
Apri una nuova discussione se vuoi qui chiudo scusami Grazie
 
Stato
Chiusa ad ulteriori risposte.
Discussioni simili
Autore Titolo Forum Risposte Data
S [PHP] Confrontare due array con valori quasi uguali PHP 2
P [PHP] Confrontare due password e due email PHP 4
I dominio aruba versione php server linux Domini 1
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2
Z Video protetto con PHP PHP 0
Z Problema di sincronizzazione PAYPAL con PHP PHP 1

Discussioni simili