Création d'un plist à  partir d'un fichier .csv

Bonjour,

J'ai récupéré des données sur internet sous la forme d'un fichier csv, et je souhaiterais générer un fichier plist à  partir de ces données. En cherchant sur le net, j'ai trouvé un truc basé sur une importation excel, en ajoutant des colonnes avec les balises adéquates, et en ré-exportant les données en txt. Le problème, c'est que le fichier que j'ai généré ainsi comporte des caractères invisibles qui font que je ne peux pas l'ouvrir car il est corrompu. J'ai confirmé cette hypothèse en supprimant les données, et en créant sous Xcode un plist identique (du point de vue de sa structure). En ouvrant les deux fichiers sous textedit, ils sont apparemment identiques, mais l'un s'ouvre sous Xcode, et l'autre est "corrompu". Si vous avez une idée pour supprimer ces caractères, ou une méthode simple pour créer un plist à  partir de données csv...



J'ai essayé de joindre les deux fichiers, mais apparemment, je n'ai pas le droit de les joindre...?



Merci d'avance pour votre aide... image/implore.gif' class='bbc_emoticon' alt=' o:) ' />

Réponses

  • Je regarderais du côté de l'encodage des caractères. Je pense que ce que tu appelles des "caractères invisibles" c'est plutôt des caractères 'mal' encodés.

    Xcode attend de l'UTF-8.
  • Oui tu as raison... D'ailleurs je pense que le fait d'être passée par excel n'était pas une bonne idée... car le fichier est bien encodé en UTF-8, mais le passage par excel n'a pas dû respecter ce codage.

    Je vais essayer une autre méthode.

    Merci en tout cas
  • groumpfgroumpf Membre
    mai 2012 modifié #4
    J'ai un script groovy qui fait ca si ca t'intéresse. Faudra surement l'adapter mais c'est un point de départ.


    <br />
    #&#33;/usr/bin/env groovy<br />
    // construit le plist des agences a partir du CSV geocode<br />
    // fichier de sortie<br />
    def oOutput = new File(&#39;agences2-geo.plist&#39;)<br />
    def oPW = oOutput.newPrintWriter(&#39;UTF-8&#39;)<br />
    // fichier d&#39;entree<br />
    def oIS = new FileInputStream(&#39;agences2-geo.csv&#39;)<br />
    def oISR = new InputStreamReader(oIS, &#39;UTF-8&#39;)<br />
    def oBR = new BufferedReader(oISR)<br />
    oPW.println(&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#39;)<br />
    oPW.println(&#39;&lt;&#33;DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;&#39;)<br />
    oPW.println(&#39;&lt;plist version=&quot;1.0&quot;&gt;&#39;)<br />
    oPW.println(&#39;&lt;array&gt;&#39;)<br />
    String oLine = oBR.readLine()<br />
    def oHeaderNames = oLine.split(&#39;;&#39;)<br />
    int oLineNumber = 1<br />
    while ((oLine = oBR.readLine()) &#33;= null)<br />
    {<br />
    <br />
    def oComponents = oLine.trim().split(&#39;;&#39;)<br />
    if (oComponents.size() == 1)<br />
    {<br />
      println &quot;Ligne incorrecte a la ligne &#036;{oLineNumber}&quot;<br />
      continue<br />
    }<br />
    oPW.println(&#39;&lt;dict&gt;&#39;)<br />
    <br />
    int i = 0<br />
    oHeaderNames.each<br />
    {<br />
      try<br />
      {<br />
       if (it == &#39;lundi1&#39;<br />
       || it == &#39;mardi1&#39;<br />
       || it == &#39;mercredi1&#39;<br />
       || it == &#39;jeudi1&#39;<br />
       || it == &#39;vendredi1&#39;<br />
       || it == &#39;samedi1&#39;<br />
       || it == &#39;natureunite&#39;<br />
       || it == &#39;datetraitement&#39;<br />
       || it == &#39;Error/Address&#39;<br />
       || it == &#39;ETUDIANT&#39;<br />
       || it == &#39;WEB&#39;<br />
       || it == &#39;MEL&#39;)<br />
       {<br />
        // on passe<br />
       }<br />
       else<br />
       {<br />
        if (it == &#39;TEL&#39; || it == &#39;FAX&#39;)<br />
        {<br />
    	 // ajouter le 0 qui a ete supprime dans les transferts Excel =&gt; csv<br />
    	 String oNum = oComponents[i].trim()<br />
    	 if (&#33;oNum.startsWith(&#39;0&#39;))<br />
    	 {<br />
    	  oNum = &#39;0&#39;+oNum<br />
    	 }<br />
    	 oPW.println(&quot;    &lt;key&gt;&#036;{it}&lt;/key&gt;&quot;)<br />
    	 oPW.println(&quot;    &lt;string&gt;&#036;{oNum}&lt;/string&gt;&quot;)  <br />
        }<br />
        else if (it == &#39;Accuracy&#39;)<br />
        {<br />
    	 // la precision 8 OK<br />
    	 if (Integer.valueOf(oComponents[i].trim()) &lt; 6)<br />
    	 {<br />
    	  println &quot;Accuracy &#036;{oComponents[i].trim()} a la ligne &#036;{oLineNumber}&quot;<br />
    	 }<br />
        }<br />
        else if (it == &#39;NbAdrReturned&#39;)<br />
        {<br />
    	 // le nombre d&#39;adresses trouvees<br />
    	 if (Integer.valueOf(oComponents[i].trim()) &gt; 1)<br />
    	 {<br />
    	  println &quot;NbAdrReturned &#036;{oComponents[i].trim()} a la ligne &#036;{oLineNumber}&quot;<br />
    	 }<br />
        }<br />
        else if (it == &#39;Code&#39;)<br />
        {<br />
    	 if (oComponents[i].trim() &#33;= &#39;200&#39;)<br />
    	 {<br />
    	  println &quot;Code &#036;{oComponents[i].trim()} a la ligne &#036;{oLineNumber}&quot;<br />
    	 }<br />
        }<br />
        else<br />
        {<br />
    	 oPW.println(&quot;    &lt;key&gt;&#036;{it}&lt;/key&gt;&quot;)<br />
    	 oPW.println(&quot;    &lt;string&gt;&#036;{oComponents[i].trim()}&lt;/string&gt;&quot;)<br />
        }<br />
       }<br />
      }<br />
      catch(Exception e) {<br />
       println &quot;Erreur &#036;{e} a la ligne &#036;{oLineNumber}&quot;<br />
      }<br />
      i++<br />
    }<br />
     <br />
    <br />
    oPW.println(&#39;&lt;/dict&gt;&#39;)<br />
    oLineNumber++<br />
    }<br />
    oPW.println(&#39;&lt;/array&gt;&#39;)<br />
    oPW.println(&#39;&lt;/plist&gt;&#39;)<br />
    oPW.close()<br />
    
Connectez-vous ou Inscrivez-vous pour répondre.