none
Comment détecter un retour chariot dans une chaine de caractère? RRS feed

  • Question

  • Bonjour,

    J'ai une chaine de caractères et je souhaite détecter un retour chariot

    comment faire ?

    J'ai essayé cela mais cela ne marche pas

    public static string RenvoiePremierLigne(string fichier)
      {
       Encoding ascii = Encoding.ASCII;
       Byte[] encodedBytes = ascii.GetBytes(fichier);
       int positionDeuxiemeLigne = 2;
       int positionTemp = 0;
       foreach (byte item in encodedBytes)
       {
        if (item == 10) // 13 = CR and 10 = LF
        {
         positionDeuxiemeLigne = positionTemp;
         break;
        }
        positionTemp++;
       }
       return fichier.Substring(0, positionDeuxiemeLigne - 1);
      }
    



    fred
    lundi 29 août 2011 16:42

Réponses

  • Bonjour,

    Cela ne marche pas car ? En testant je crois voir que cela retourne un caractère de moins de prévu car le deuxième paramètre de substring n'est pas une position mais un nombre de caractères (donc si LF est en position 10, il faut bien prendre les caractères 0 à 9 donc 10 caractères et non pas 9).

    Après  un test comme :

     Char lf = (Char)10;
     String str = "Première ligne." + lf + "Deuxième ligne.";
     MessageBox.Show(str.Substring(0,str.IndexOf(lf)));
    

    serait sans doute aussi simple (je ne vois pas pourquoi on cherche l'octet 10 dans un tableau d'octets plutôt que le caractère LF dans une chaine de caractère).

    Vérifier peut-être aussi que le séparateur est bien LF uniquement et non pas CR/LF ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    • Marqué comme réponse fred75 mardi 30 août 2011 09:35
    lundi 29 août 2011 17:30
    Modérateur

Toutes les réponses

  • Bonjour,

    Cela ne marche pas car ? En testant je crois voir que cela retourne un caractère de moins de prévu car le deuxième paramètre de substring n'est pas une position mais un nombre de caractères (donc si LF est en position 10, il faut bien prendre les caractères 0 à 9 donc 10 caractères et non pas 9).

    Après  un test comme :

     Char lf = (Char)10;
     String str = "Première ligne." + lf + "Deuxième ligne.";
     MessageBox.Show(str.Substring(0,str.IndexOf(lf)));
    

    serait sans doute aussi simple (je ne vois pas pourquoi on cherche l'octet 10 dans un tableau d'octets plutôt que le caractère LF dans une chaine de caractère).

    Vérifier peut-être aussi que le séparateur est bien LF uniquement et non pas CR/LF ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    • Marqué comme réponse fred75 mardi 30 août 2011 09:35
    lundi 29 août 2011 17:30
    Modérateur
  • Bonsoir Fred,

    Peut-être que c'est faisable en passant par Split :

    string[] lesLignes = fichier.Split(new string[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    



    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    lundi 29 août 2011 17:51
  • merci Michel et Patrice,

    je vais tester cela demain

     


    fred
    lundi 29 août 2011 21:45
  • Bonjour,

    T'as raison, Patrice, des fois, on se complique la vie inutilement.

    Pour la première ligne, j'utilisera la méthode de Patrice

    par contre pour les autres lignes, la méthode de Michel semble meilleure car plusieurs arguments.

    Merci de votre aide.

     


    fred
    mardi 30 août 2011 09:35
  • Cela dépend si on veut uniquement la première ligne ou récupérer toutes les lignes sous forme d'un tableau de lignes...
    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 30 août 2011 10:33
    Modérateur
  • oui exactement

    dans mon cas, fichier csv, la première ligne désigne les entêtes et les lignes suivantes les data

    Je sais qu'il existe des DLL pour lire les fichiers csv mais je préfère créer ma classe (c'est comme ça qu'on apprend :O))

     


    fred
    mardi 30 août 2011 12:46