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

Delphi Discussion :

Tableau dynamique et fichier CSV


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 50
    Par défaut Tableau dynamique et fichier CSV
    Bonjour,
    je cherche la methode ou fonction equivalante a split de vb pour delphi

    qui me permet de recuper les donner avant le ; ou :.

    ex

    nom;prenom; adresse;

    lit et inser tableau nom puis prenom puis adrresse et ne tenat pas compte du ;

    merci

  2. #2
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Regarde du côté de TStrings/TStringList, Delimiter et DelimitedText.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre émérite
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    Attention le DelimiterText pose des problèmes avec le #0 considéré comme fait de chaine ou séparateur, je ne sais plus, il élimine les char de #1 à ' ', considère ce dernier comme un séparateur, la fonction de la FAQ est fiable dans de nombre cas, mais elle est lente lorsque l'on a des fichiers de plusieurs Mo à traiter, j'ai donc fait la mienne :

    ATTENTION, la Fonction Explode de la FAQ, ou la suivante, ne sont pas faite pour du CSV, il faut gérer pour cela le " et le ; !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    {* -----------------------------------------------------------------------------
    la fonction Explode retourne un tableau de chaînes. Ce sont les sous-chaînes, extraites de S, en utilisant le séparateur Separator.
    @param S Chaine à découper
    @param A Tableau de Chaine qui recevra la découpe
    @param Separators Caractères qui délimitent une chaine pour la découpe
    @param ExcludeEmpty Si True, les Chaines vides ne sont pas insérés dans le Tableau
    @return Nombre de Séparateur Trouvé (peut-être différent du nombre de chaine dans A !)
    ------------------------------------------------------------------------------ }
    function Explode(const S: string; out A: Types.TStringDynArray; const Separators: string; ExcludeEmpty: Boolean = False): Integer;
    var
      iLesSep: Integer;
     
      function IsSeparator(const C: Char): Integer;
      begin
        for Result := 1 to iLesSep do
          if C = Separators[Result] then
            Exit;
     
        Result := -1;
      end;
     
    var
      iStr: Integer;
      iLenS: Integer;
      iLenSS: Integer;
      iLenA: Integer;
      iBegin: Integer;
      iExclude: Integer;
    begin
      iLenS := Length(S);
     
      if iLenS = 0 then
      begin
        SetLength(A, 1);
        Result := 0;
        A[Result] := '';
        Exit;
      end;
     
      iLesSep := Length(Separators);
     
      iLenA := 0;
      for iStr := 1 to iLenS do
        if IsSeparator(S[iStr]) > 0 then
          Inc(iLenA);
      if IsSeparator(S[iLenS]) > 0 then
        Inc(iLenA);
     
      SetLength(A, iLenA);
      iBegin := 1;
      iLenSS := 0;
      Result := 0;
      iExclude := 0;
     
      for iStr := 1 to iLenS do
      begin
        if IsSeparator(S[iStr]) > 0 then
        begin
          if ExcludeEmpty and (iLenSS = 0) then
          begin
            iBegin := iStr + 1;
            Inc(iExclude);
          end else
          begin
            A[Result] := Copy(S, iBegin, iLenSS);
            Inc(Result);
            iBegin := iStr + 1;
            iLenSS := 0;
          end;
        end else
          Inc(iLenSS);
      end;
     
      if Result < iLenA then
        A[Result] := Copy(S, iBegin, MaxInt);
     
      if ExcludeEmpty and (iExclude > 0) then
        A := Copy(A, 0, iLenA - iExclude);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {* -----------------------------------------------------------------------------
    la fonction ExplodeToStrings encapsule Explode pour renvoyer une liste.
    @param S Chaine à découper
    @param A Tableau de Chaine qui recevra la découpe
    @param Separators Caractères qui délimitent une chaine pour la découpe
    @param ExcludeEmpty Si True, les Chaines vides ne sont pas insérés dans le Tableau
    @return Nombre de Séparateur Trouvé (peut-être différent du nombre de chaine dans A !)
    ------------------------------------------------------------------------------ }
    function ExplodeToStrings(const S: string; L: TStrings; const Separators: string; ExcludeEmpty: Boolean = False): Integer;
    var
      A: Types.TStringDynArray;
      iL: Integer;
    begin
      if Assigned(L) then
      begin
        Result := Explode(S, A, Separators, ExcludeEmpty);
        L.Clear();
        L.Capacity := Result;
        for iL := Low(A) to High(A) do
          L.Add(A[iL]);
      end else
        Result := -1;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 160
    Par défaut
    Pourquoi reinventer la roue?

    http://www.whitepeaksoftware.com/wps...i_library.aspx

    Et voilà un CSV parser en deux coup de cuilleres à compote de pomme

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 50
    Par défaut
    merci de vos reponse je n'ai pas eu encore le tmps de tester j'espere ce WK-end

    j'ai lu la faq mais j'ai pas vue le code .


    Peche de jeunesse.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/07/2014, 09h15
  2. Réponses: 1
    Dernier message: 29/02/2012, 17h42
  3. Importation tableau html dans fichier .csv ou excel
    Par ritavsky dans le forum VB.NET
    Réponses: 4
    Dernier message: 31/05/2010, 11h04
  4. passer d'un tableau croisé dynamique à un fichier csv?
    Par ballantine's dans le forum Excel
    Réponses: 1
    Dernier message: 22/03/2010, 11h45
  5. Delphi: Lecture d'un fichier avec un tableau dynamique
    Par grégoire2 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2006, 18h50

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