[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:
// 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"
 
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?
 
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.
 
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:
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

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.
 
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:
@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 ….
 
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:
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)
 
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!
 
@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