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 :

formatage d'une chaine


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut formatage d'une chaine
    Bonjour à tous,

    J'utilise un fichier csv (très mal construit) pour récupérer des données et j'ai besoin de séparer une chaine de caractère.
    Les valeurs de la chaine que je récupère sont séparées par un nombre variable d'espace et j'aimerais mettre des ; à la place.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    format('aaaa        bb      cc d      ee    f               g:');
    donnerait : 'aaaa;bb;cc;d;ee;f;g:'

    J'ai essayé la fonction replacestring mais je suis coincé par le nombre variable d'espace.

    Si quelqu'un voit une solution pas trop compliqué, sachant que je ne peux pas modifier le fichier csv.

    merci

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    on peut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    destline:='' ;
    For i:=1 to length(sourceline) do 
         if sourceline[i]<>' ' 
            then destline:=destline+sourceline[i]
            else if (length(destline)=0) or (destline[length(destline)]<>' ') 
                     then destline:=destline+';' ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Salut,

    Tu peux utliliser un TStringList si tu veux, ce pourrait être pratique si tu dois traiter chaque valeur de champ.

    Voilà dans l'idée :
    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
    function TForm1.DecouperLigne(const Ligne: String): String;
    var
      vIndice: Integer;
    begin
      with TStringList.Create do
        try
          Delimiter := ' ';
          DelimitedText := Ligne;
     
          for vIndice := Count-1 downto 0 do
            if Strings[vIndice] = EmptyStr then
              Delete(vIndice);
     
          {Bon je renvoie ce que tu demandes, mais tu peux traiter ici chaque valeur de Strings[indice de colonne]}
     
          Delimiter := ';';
          Result := DelimitedText;
        finally
          Free;
        end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(DecouperLigne('aaaa        bb      cc d      ee    f               g:'));
    end;
    « La simplicité est la sophistication suprême » (Léonard de Vinci)

  4. #4
    Membre expérimenté
    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
    Points : 1 339
    Points
    1 339
    Par défaut
    Le mieux est de faire une fonction :

    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
    function WSVToCSV(const s : string) : string;
    var
      i, n : integer;
    begin
      i := 1;
      n := length(s);
      result := '';
      while (i <= n) do
      begin
        // si pas blanc, on ajoute le caractère
        if (s[i] <> ' ') then
        begin
          result := result + s[i];
          inc(i);
        end
        // si blanc...
        else
        begin
          // ... on ajoute un ; ...
          result := result + ';';
          inc(i);
          // ... et on saute les éventuels blancs qui suivent
          while (i <= n) and (s[i] = ' ') do
            inc(i);
        end;
      end;
    end;
    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    merci pour les différentes réponses.
    Je testerais demain.

Discussions similaires

  1. [RegEx] Formatage d'une chaine de caractère.
    Par Niki59 dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2012, 13h29
  2. Réponses: 1
    Dernier message: 12/08/2010, 14h10
  3. formatage d'une chaine de caractère
    Par Kropernic dans le forum Windows Forms
    Réponses: 6
    Dernier message: 18/10/2007, 15h53
  4. Formatage d'une chaine pour sscanf
    Par Pragmateek dans le forum C
    Réponses: 6
    Dernier message: 30/04/2006, 00h11
  5. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08

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