IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Caractères BOM dans la lecture d'un CSV ?


Sujet :

Langage PHP

  1. #21
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    le format n'est pas bon pour un traitement en PHP mais j'ai cru comprendre qu'il conviendrait pour d'autres langages (par exemple C#).
    Le CSV (comma separated value) est un format indépendant du langage. Il y'a des règles a respecter pour qu'il puissent être interprété correctement.

    Techniquement cette chaine est valide en csv (tu en as un exemple sur wikipedia) :
    "SESAID,""ALTERNATEIDS"",""PLATFORM"",""MANAGEREMAIL"""
    Elle veux juste dire que tu n'as qu'une seule colonne avec comme valeur : SESAID,"ALTERNATEIDS","PLATFORM","MANAGEREMAIL". Et non plusieurs colonnes.

    On est d'accord que ca semble étrange.
    Reste donc à savoir si c'est voulu par l'entité qui génère le CSV ou si c'est une erreur de leur part.

    Là comme ca ca me fait penser à un export d'une base de données qui n'est pas découpé en forme normale mais dont les champs et les valeurs sont toutes sérialisées (le truc horrible quoi)

  2. #22
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ce matin, j'ai l'esprit plus clair. Comme je récupère les différentes lignes du CSV sous forme de tableau ; car j'ai laissé
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $buffer= 4096;
    while (($line_csv = fgetcsv(CSVParser::getHandle(), $buffer, CSVParser::getSeparator(),
          CSVParser::getEnclosure(),"")) !== false) {
    etc
    j'ai mis ces lignes de traitement :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $new_line_csv_copy = $new_line_csv;
    $new_line_csv_copy = [];
    foreach($new_line_csv as $one_elt_of_the_line){
         $one_elt_of_the_line = str_replace('""', '"', $one_elt_of_the_line); //remplacer "" par "
         $new_line_csv_copy[] = $one_elt_of_the_line;
    }

    A noter que si je saisie ta première proposition de code (Cosmo) , les 2 suivantes, je décroche.

    Néanmoins, même avec ce que j'ai fait, le "" n'est pas remplacé par un simple ". Pourquoi ?

  3. #23
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Non.
    1. je charge la ligne avec fgets
    2. J'effectue les traitements pour obtenir une ligne de CSV correcte
    3. Je génère le tableau avec str_getcsv

  4. #24
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour Laurent et Cie,

    Citation Envoyé par laurentSc Voir le message
    ...Tout ce que je sais, c'est que c'est fait en interne dans ma boîte...
    1- Je répète :
    • RENSEIGNE-TOI (qui ?)
    • et fais en sorte de faire CORRIGER le problème A LA SOURCE (en amont)

    Celui qui génère ces fichier fait certainement une MAUVAISE manip. (laquelle ? pourquoi ?)

    2- SI, ET SEULEMENT SI, aucune correction n'est possible en amont,
    • alors SEULEMENT là, tu peux/dois bricoler TON code

    Sachant que le jour où l'"autre" corrigera ces CSV, ton code ne vaudra plus rien !

    N.B. Évidemment la solution proposée par CosmoKnacki fonctionnera.
    Mais c'est une "couche de travail" supplémentaire, qui pourrait être évitée avec un CSV correct.

  5. #25
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    En fait, comme le responsable de la bdd est mon interlocuteur américain, si je lui adresse le besoin de modif, il fera suivre.

    Pour être sûr de demander ce qu'il faut, je vous soumets ma requête avant de l'envoyer :

    I think that the format of the CSV files exported from ARM database is not correct. I take as example the header and one record line.
    Today, we have:

    "SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
    ""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL"""

    "SESA1000,""(none)"",""Software Engineering"",""SESA84441"",""Atlassian"",""JIRA Global Instance"","""",""True"",""Jan 01, 2021"","""","""",""Spain"",""Miguel"",""Abad"",""SCHNEIDER ELECTRIC ESPANA, S.A.U."",""FKP8"","""",""Global Finance"",""BARCELONA (BAC DE RODA)"",""mail.address@se.com"",""Alistair"",""Mckelvie"",""manager.mail.address@se.com"""

    The right format would be:

    "SESAID","ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE","GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE",
    "REPORTINGENTITY","BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"

    "SESA1000","(none)","Software Engineering","SESA84441","Atlassian","JIRA Global Instance","","True","Jan 01, 2021","","","Spain","Miguel","Abad","SCHNEIDER ELECTRIC ESPANA, S.A.U.","FKP8","","Global Finance","BARCELONA (BAC DE RODA)"," ","Alistair","Mckelvie","manager.mail.address@se.com"

    Is it possible to do this modification? (the mail address are modified for confidentiality reason)

  6. #26
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    The right format should be:
    et, à priori :
    • SESAID,"...","...","..."


    Is it possible to do this modification?
    Non...

    J'aurais plutôt demandé :
    • pouvez-vous vérifier la méthode d'extraction des données (création du fichier CSV), afin d'obtenir un fichier CSV correctement formaté ?
    • sinon, faites-moi savoir si ce n'est pas possible. Je prendrais alors les dispositions nécessaires.

  7. #27
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    subject: not correct format of CSV files exported from ARM Database

    text:

    I think that the format of the CSV files exported from ARM database is not correct. I take as example the header and one record line.
    Today, we have:
    "SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
    ""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL"""

    "SESA1000,""(none)"",""Software Engineering"",""SESA84441"",""Atlassian"",""JIRA Global Instance"","""",""True"",""Jan 01, 2021"","""","""",""Spain"",""Miguel"",""Abad"",""SCHNEIDER ELECTRIC ESPANA, S.A.U."",""FKP8"","""",""Global Finance"",""BARCELONA (BAC DE RODA)"",""mail.address@se.com"",""Alistair"",""Mckelvie"",""manager.mail.address@se.com"""

    The right format should be:
    SESAID,"ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE",GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE",
    "REPORTINGENTITY","BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"

    SESA1000,"(none)","Software Engineering","SESA84441","Atlassian","JIRA Global Instance","","True","Jan 01, 2021","","","Spain","Miguel","Abad","SCHNEIDER ELECTRIC ESPANA, S.A.U.","FKP8","","Global Finance","BARCELONA (BAC DE RODA)","mail.address@se.com","Alistair","Mckelvie","manager.mail.address@se.com"

    Can you check the data extraction method, in order to get correct / valid csv file?
    If not, let me know if it is not possible. I would then make the necessary arrangements. (the mail address are modified for confidentiality reason))
    Ca colle ?

  8. #28
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut


    Ça pourrait te faire économiser DES MOIS de programmation... et de prise de tête !


    Cela dit... SUPPRIME cette ligne :
    If not, let me know if it is not possible. I would then make the necessary arrangements.
    Elle lui donne une "porte de sortie" trop facile...

  9. #29
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'ai envoyé le mail mais j'aurai la réponse que l'année prochaine (l'américain est en vacances).

  10. #30
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    À ta place, j'aurais ajouté quelques menaces.

  11. #31
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas encore décidé si pour tuer le temps, j'allais implémenter la solution de CosmoKnacki ou m'occuper autrement. La nuit porte conseil. Je déciderai demain.

  12. #32
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tous comptes faits, j'espère que la réponse sera positive, donc je l'attends et n'implémenterai la solution de CosmoKnacki que si c'est pas bon. J'ai d'autres choses à faire...

  13. #33
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Une question au sujet du calcul du header.

    A l'heure actuelle, le header est déterminé ainsi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rewind(self::$handle);//pointer au début du fichier
    if (false !== $line = fgets(self::$handle,4096)) { //j'ai rallongé la longueur
                $line = preg_replace('~^\N{U+FEFF}~u', '', $line);
                $line = rtrim($line);
                $line = substr($line, 1, -1);
                $line = str_replace('""', '"', $line);
                $header = str_getcsv($line);
    }
    Je viens de trouver un fichier CSV sur lequel y a un problème.

    header à rallonge (obtenu avec PHPSTORM) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    Mois de Months;Priority (group);Incident/Work Order;Months;ServiceLine;Support Group Role;1;Actual End Date Time;Actual Start Date Time;Assigned Group;Assigned Org;Assignee;Assignee SESA ID;Associated RKM;Associated RKM Number;Associated RKM Title;Audit ID;Backlog (copy 2);CI;Client Details;Closed/Completed Date Time;Cluster;Cluster (First Assigned Group);Contact First Name;Contact Last Name;Contact SESA ID;Country;Customer Client Details;Customer Connectivty Type;Customer Department;Customer First Name;Customer Job Code;Customer Last Name;Customer Organization;Customer SESA ID;Customer Subsidiary Company;Customer User Seg;Customer Vendor Identity;Date Filter;Date Selector;Date Selector Param;Eco System/Teams;Eco System/Teams (First Assigned Group);First Assigned Group;Form;Impact;KSR Number;Last Modified Date Time;Last Resolved Date Time;Marked as Duplicate;Month.V.0;Operational Cat Calculated;Operational Cat Tier 1;Operational Cat Tier 2;Operational Cat Tier 3;Organization;Organization (First Assigned Group);Practices;Practices (First Assigned Group);Previous Month;Priority;Product Cat Calculated;Product Cat Tier 1;Product Cat Tier 2;Product Cat Tier 3;Product Name;Region;Region Calculated;Regions;Regions (1);Reopened;Reported Source;Resolution;Resolution OLA Status;Resolution Op Cat Calculated;Resolution Op Cat Tier 1;Resolution Op Cat Tier 2;Resolution Op Cat Tier 3;Resolution Prod Cat Calculated;Resolution Prod Cat Tier 1;Resolution Prod Cat Tier 2;Resolution Prod Cat Tier 3;Resolution Product Name;Resolution SLA Status;RKM Article Associated;Scheduled End Date Time;Scheduled Start Date Time;Sd/Oss;SD/OSS (First Assigned Group);SE Digital Domains;SE Digital Domains (First Assigned Group);Service;Silver Support;Site;SLA Status;Status;Status Reason;Submit Date Time;Submitter;Submitter Country;Submitter Site;Summary;Template Name;Ticket Hyperlink;Ticket Number;Ticket Type;Urgency;Vendor;Vendor (First Assigned Group);Vendor Group;Vendor Ticket Number;Week;Zone;Zone (copy);Backlog% Target;Cancelled/Rejected;color month;Count;Current Month;Effort Time Spent;Group Transfers;Group Transfers Not Help Desk;HDF% Threshold;Help Desk Fix%;Help Desk Fix% (copy 2);Help Desk Fix% (copy);Help Desk% Target;KSR Count;min;Month.v1;MTTR  Threshold WO;MTTR (calendar days);MTTR (calendar days) (copy 2);MTTR (OTAT);MTTR (OTAT) R&D Logic;MTTR (weekdays);MTTR (weekdays) (copy);MTTR Net (calendar days);Nombre d'enregistrements;Ph Tk % Threshold (copy);Phone Tickets;Previous Month (copy);Previous Month (copy)2;R&D Logic;R&D Logic  - Open;Re-opened Threshold;Re-Opened% Target;Reopened Ticket %;Reopened Ticket % (copy 2);Reopened Ticket % (copy);Resolved;Response OLA Status;Response SLA Status;SLA Target;SLA Threshold;SLA% (ITR%);SLA% (ITR%) (copy);SLA% (ITR%) R&D Logic;Strike Rule;Submitted;Ticket Age (calendar days);Ticket Age (weekdays);Ticket Age (weekdays) (copy);Ticket Count;Ticket Per User;Time in Pending (min);Time in Pending Client (min);Total Time Spent

    $header obtenu :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    ois de Months;Priority (group);Incident/Work Order;Months;ServiceLine;Support Group Role;1;Actual End Date Time;Actual Start Date Time;Assigned Group;Assigned Org;Assignee;Assignee SESA ID;Associated RKM;Associated RKM Number;Associated RKM Title;Audit ID;Backlog (copy 2);CI;Client Details;Closed/Completed Date Time;Cluster;Cluster (First Assigned Group);Contact First Name;Contact Last Name;Contact SESA ID;Country;Customer Client Details;Customer Connectivty Type;Customer Department;Customer First Name;Customer Job Code;Customer Last Name;Customer Organization;Customer SESA ID;Customer Subsidiary Company;Customer User Seg;Customer Vendor Identity;Date Filter;Date Selector;Date Selector Param;Eco System/Teams;Eco System/Teams (First Assigned Group);First Assigned Group;Form;Impact;KSR Number;Last Modified Date Time;Last Resolved Date Time;Marked as Duplicate;Month.V.0;Operational Cat Calculated;Operational Cat Tier 1;Operational Cat Tier 2;Operational Cat Tier 3;Organization;Organization (First Assigned Group);Practices;Practices (First Assigned Group);Previous Month;Priority;Product Cat Calculated;Product Cat Tier 1;Product Cat Tier 2;Product Cat Tier 3;Product Name;Region;Region Calculated;Regions;Regions (1);Reopened;Reported Source;Resolution;Resolution OLA Status;Resolution Op Cat Calculated;Resolution Op Cat Tier 1;Resolution Op Cat Tier 2;Resolution Op Cat Tier 3;Resolution Prod Cat Calculated;Resolution Prod Cat Tier 1;Resolution Prod Cat Tier 2;Resolution Prod Cat Tier 3;Resolution Product Name;Resolution SLA Status;RKM Article Associated;Scheduled End Date Time;Scheduled Start Date Time;Sd/Oss;SD/OSS (First Assigned Group);SE Digital Domains;SE Digital Domains (First Assigned Group);Service;Silver Support;Site;SLA Status;Status;Status Reason;Submit Date Time;Submitter;Submitter Country;Submitter Site;Summary;Template Name;Ticket Hyperlink;Ticket Number;Ticket Type;Urgency;Vendor;Vendor (First Assigned Group);Vendor Group;Vendor Ticket Number;Week;Zone;Zone (copy);Backlog% Target;Cancelled/Rejected;color month;Count;Current Month;Effort Time Spent;Group Transfers;Group Transfers Not Help Desk;HDF% Threshold;Help Desk Fix%;Help Desk Fix% (copy 2);Help Desk Fix% (copy);Help Desk% Target;KSR Count;min;Month.v1;MTTR  Threshold WO;MTTR (calendar days);MTTR (calendar days) (copy 2);MTTR (OTAT);MTTR (OTAT) R&D Logic;MTTR (weekdays);MTTR (weekdays) (copy);MTTR Net (calendar days);Nombre d'enregistrements;Ph Tk % Threshold (copy);Phone Tickets;Previous Month (copy);Previous Month (copy)2;R&D Logic;R&D Logic  - Open;Re-opened Threshold;Re-Opened% Target;Reopened Ticket %;Reopened Ticket % (copy 2);Reopened Ticket % (copy);Resolved;Response OLA Status;Response SLA Status;SLA Target;SLA Threshold;SLA% (ITR%);SLA% (ITR%) (copy);SLA% (ITR%) R&D Logic;Strike Rule;Submitted;Ticket Age (calendar days);Ticket Age (weekdays);Ticket Age (weekdays) (copy);Ticket Count;Ticket Per User;Time in Pending (min);Time in Pending Client (min);Total Time Spen
    Donc la première et la dernière lettres sont supprimées.
    Quel est le problème, STP ?

  14. #34
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Laurent,

    1- Tu ne peux pas - ne DOIS pas - faire des opérations sans les contrôler.
    Tu supprimes "manu militari" les 1er et dernier caractère, SANS contrôler ce qu'ils sont :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $line = substr($line, 1, -1);


    2- Il existe PLUSIEURS "formes" possibles pour les fichiers CSV que tu veux traiter.

    • A TOI d'en lister les différences (avec ou sans "", toute la ligne encadrée de "....." ou pas,...)
    • A TOI de contrôler, pour traiter, SI NÉCESSAIRE, ces différences

  15. #35
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Effectivement dans le premier script, le substr retire le premier et le dernier caractère (qui étaient censés être le premier et dernier double-quote dans le format que tu avais présenté). Mais si maintenant tu as des fichiers avec des formats complètement différents, je ne sais pas comment tu vas t'en sortir! Car ça implique de deviner quel est le format du fichier avant de faire quoi que ce soit avec, ne serait-ce que pour déterminer quel est le bon séparateur (la virgule, le point-virgule, autre chose?). Si à la limite tu as toujours deux, trois formats de fichiers différents, mais toujours les mêmes, c'est encore possible de faire une détection pour savoir auquel des formats tu as à faire, mais si c'est totalement aléatoire et qu'à chaque fois tu dois deviner le séparateur, le délimiteur, l'échappement et si oui ou non l'ensemble de la ligne a été fourré dans une chaîne entre quotes par je ne sais quel sagouin, c'est même pas la peine de te fatiguer, ou alors tu les ouvres toi-même un par un pour savoir ce qu'il en est, tu les normalises en ligne de commande avant de les passer à ton script php et basta! Parce que coder un détecteur de CSV foireux, c'est quand même une entreprise plutôt hasardeuse.

  16. #36
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    ...par je ne sais quel sagouin...
    @CosmoKnacki
    Vu que le gars est "Amerloquien" *,.. pas sûr de savoir traduire "sagouin" !


    * "tribute to"... Claude Nougaro :
    "C'est pas du Ronsart, c'est de l'amerloque..."
    <3


  17. #37
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Pour vous rassurer, je traite des CSV venant de 2 bases de données, celle gérée par "l'amerloque" et une autre, qui, je crois, est française. Le script de CosmoKnacki est initialement conçu pour les CSV américains. J'ai rajouté un test :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $char = mb_substr($line, 0, 1); // premier caractère
    if ($char == '"')
           $line = substr($line, 1, -1);
    et le tour est joué !

    EDIT :
    Citation Envoyé par CosmoKnacki Voir le message
    Attention aux ours cachés derrière les sapins!
    Quand j'ai lu ça dimanche soir, je me suis dit : connais pas cette métaphore. Lundi matin, j'ai réalisé que c'était pas une métaphore !
    Pour la petite histoire, le dernier ours en chair et en os dans le Vercors a été abattu en 1946 dans le Vercors drômois (le Vercors est à cheval sur les départements de l'Isère et de la Drôme) et aujourd'hui , les seuls ours qu'on peut rencontrer sont celui en granite sur la place de Villard de Lans ou quelques uns en bois.

  18. #38
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    @CosmoKnacki
    Vu que le gars est "Amerloquien" *,.. pas sûr de savoir traduire "sagouin" !
    Avec imtranslate il devrait s'en sortir, si du moins il s'abstient de copier/coller le mot dans son excel pour le larder de quotes avant de le traduire.

  19. #39
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Pour vous rassurer, je traite des CSV venant de 2 bases de données, celle gérée par "l'amerloque" et une autre, qui, je crois, est française. Le script de CosmoKnacki est initialement conçu pour les CSV américains. J'ai rajouté un test :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $char = mb_substr($line, 0, 1); // premier caractère
    if ($char == '"')
           $line = substr($line, 1, -1);
    et le tour est joué !
    Oui mais même dans un fichier CSV "correct", la première colonne du header peut aussi être entre quotes (même si ça ne sert à rien), es-tu sur que ça n'est jamais le cas pour les fichiers issus de la base de données française?

    Autre chose, si ton test permet bel et bien de déterminer la provenance et donc le format du fichier, c'est pas seulement le substr qu'il faut éviter mais tout le traitement qui devient alors inutile, et donc dans le cas d'un CSV correct, il suffit de poursuivre la lecture "normalement" comme tu le faisais avec fgetcsv.

  20. #40
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Oui mais même dans un fichier CSV "correct", la première colonne du header peut aussi être entre quotes (même si ça ne sert à rien), es-tu sur que ça n'est jamais le cas pour les fichiers issus de la base de données française?
    Il me semble. Néanmoins, avant de passer en production, je ferai des tests approfondis, et si besoin, je modifierai le test ou en rajouterai d'autres.

    Citation Envoyé par CosmoKnacki Voir le message
    Autre chose, si ton test permet bel et bien de déterminer la provenance et donc le format du fichier, c'est pas seulement le substr qu'il faut éviter mais tout le traitement qui devient alors inutile, et donc dans le cas d'un CSV correct, il suffit de poursuivre la lecture "normalement" comme tu le faisais avec fgetcsv.
    J'étais parti pour appliquer ton conseil :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $char = mb_substr($line, 0, 1); // premier caractère
    if ($char == '"')  {
                    $line = preg_replace('~$char == '"'^\N{U+FEFF}~u', '', $line);
                    $line = rtrim($line);
                    $line = substr($line,1, -1);
                    $line = str_replace('""', '"', $line);
                    $separator = ",";
    }
    else
                    $separator = ";";
     
    $header = str_getcsv($line, $separator);
    mais ça coince au niveau de la détermination du premier caractère de la chaîne. Avec le code ligne 1, je m'attends à avoir $char == '"'mais je n'ai que $char == '' (pour une chaîne en entrée $line = '"SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",etc,""MANAGEREMAIL"""';. D'où ça peut venir ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/01/2013, 15h49
  2. [MySQL] caractère indésirable dans sortie var_export dans fichier .csv
    Par Snooze59 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 11/08/2010, 13h49
  3. Lecture des caractères accentués dans un fichier
    Par albertgl dans le forum MATLAB
    Réponses: 15
    Dernier message: 04/03/2010, 16h35
  4. Réponses: 2
    Dernier message: 07/05/2009, 16h50
  5. Réponses: 4
    Dernier message: 29/02/2008, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo