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 :

Lire le contenu d'un fichier UDL et le mettre dans une variable string


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 12
    Points
    12
    Par défaut Lire le contenu d'un fichier UDL et le mettre dans une variable string
    Bonjour,
    Je travaille avec un fichier UDL pour établir la connexion entre mon application en DELPHI7 et la BDD SQL. Je veux lire le contenu de mon fichier UDL et le mettre dans une variable liste String. Pour ceux j'utilise la procédure suivante (sachant que je considère mon fichier UDL comme un fichier TEXT) mais ça ne marche malheureusement pas. Avez vous des idées pour m'aider SVP??
    P.S: tous se compile sans faute mais le résultat n'est pas du tout le contenu du fichier
    Voilà ma procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.button1click(Sender: TObject);
    Var F: textFile;
    Stg:String;
    begin
    //Lire le contenu du fichier
    Memo1.Clear; //Efface le contenu de Memo1
    AssignFile(F,ExtractFilePath(Application.ExeName)+'test.udl');
    Reset(F);
    repeat //Repeter...
    Readln(F,Stg); //Lit une ligne du fichier texte jusqu'au prochain sut de ligne
    Memo1.Lines.Add(Stg); //Affiche dans Memo1 le contenu de la variable Stg pour savoir ce qui me donne comme sortie
    until EOF(F);// ...jusqu'à ce que la position en cours du pointeur se trouve en fin de fichier
    CloseFile(F);
    end;

  2. #2
    Nouveau membre du Club
    Profil pro
    Developpeur
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Attend je cherche.

  3. #3
    Membre chevronné

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 577
    Points : 1 989
    Points
    1 989
    Par défaut
    Bonjour, http://bodman.developpez.com/ESdelphi/ ceci peux t'aider.

  4. #4
    Nouveau membre du Club
    Profil pro
    Developpeur
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Une doc sur la fonction UnicodeToUtf8

    UnicodeToUtf8,fonction
    Convertit une chaîne de caractères Unicode en chaîne UTF-8.

    Unité

    System

    Catégorie

    conversions de jeux de caractères

    Syntaxe Delphi :

    functionUnicodeToUtf8(DestChar;MaxDestBytes:Cardinal;SourceWideChar;SourceChars:Cardinal):Cardinal;overload;
    functionUnicodeToUtf8(DestChar;SourceWideChar;MaxBytes:Integer):Integer;overload;deprecated;

    Syntaxe C++:

    externPACKAGE Cardinal__ fastcallUnicodeToUtf8(char*Dest,CardinalMaxDestBytes,wchar_t *Source,CardinalSourceChars);
    externPACKAGE int__ fastcallUnicodeToUtf8(char*Dest,wchar_t *Source,intMaxBytes);

    Description

    Appelez UnicodeToUtf8 pour convertir une chaîne Unicode en une suite àzéro terminal de caractères UTF-8.Utilisez la première syntaxe.La seconde syntaxe est fournie uniquement pour des questions de compatibilitéavec les versions précédentes.

    Dest reçoit le tableau àzéro terminal de caractères UTF-8.

    MaxDestBytes ou MaxBytes indiquent le nombre d'octets disponibles dans le tampon spécifiépar Dest,y compris le caractère Null de terminaison.

    Source est un tableau de caractères Unicode.

    SourceChars indique le nombre de caractères de Source.Si SourceChars n'est pas spécifié,Source doit être terminée par le caractère Null.

    UnicodeToUtf8 renvoie le nombre d'octets écrits dans Dest.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par kevin254kl Voir le message
    Bonjour, http://bodman.developpez.com/ESdelphi/ ceci peux t'aider.
    Merci Kevin, j'ai utilisé la 2ème solution avec File of char et ça marche pour l'instant.

    Je vous remercie tous pour votre aide

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 12
    Points
    12
    Par défaut Problème 2
    la 2ème méthode dont je vous ai parlé tout à l'heure ne marche pas si je la met dans une fonction comme suit:
    P.S: je veux récupérer les données du fichier dans une variable
    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
    function Read_UDL(Const Fichier : string) : string;
    var
        Fic : file of char;
        s :String;
        carac:char;
    begin
    Result:=' ';
      assignFile(Fic,Fichier);
      try
      reset(Fic);
        while not eof(Fic) do begin
          read(Fic,carac);
          s:=s+carac;
        end;
      finally
        CloseFile(Fic);
      end;
      Result:=s;
    end;
     
    procedure TForm1.button2hope(Sender: TObject);
    var
    s :String;
    begin
    Memo1.Clear;
    s:=Read_UDL('fichier.udl');
    memo1.lines.text:= memo1.lines.text+s;
    end;

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 129
    Points : 41 286
    Points
    41 286
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    J'ai tout d'abord eu du mal à comprendre le problème, un fichier UDL pour moi étant une inconnue, je croyais avoir affaires avec un format spécial d'où ma non intervention.
    Je ne doute pas du caractère pédagogique de la lecture d'un fichier ligne par ligne voire caractère par caractère
    mais s'il s'agit juste d'afficher un contenu de fichier dans un mémo pourquoi ne pas utiliser tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //if OpenDialog1.Execute then
      memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'test.udl')// (OpenDialog1.FileName);

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    J'ai tout d'abord eu du mal à comprendre le problème, un fichier UDL pour moi étant une inconnue, je croyais avoir affaires avec un format spécial d'où ma non intervention.
    Je ne doute pas du caractère pédagogique de la lecture d'un fichier ligne par ligne voire caractère par caractère
    mais s'il s'agit juste d'afficher un contenu de fichier dans un mémo pourquoi ne pas utiliser tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //if OpenDialog1.Execute then
      memo1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'test.udl')// (OpenDialog1.FileName);
    Non il s'agit pas d'afficher le contenu du fichier dans le Memo , enfaite j'utilise le Memo juste pour savoir que je peux récupérer les données du fichier. Mon but est de récupérer les données du fichiers UDL qui est en UNICODE pour pouvoir les traiter après dans mon programme.
    Merci
    Et quand je teste avec cette fonction, le programme m'affiche rien aussi sur le Memo. Du coup, celle d'ajouter caractère par caractère marche dans le cas du memo mais pas dans le cas d'une variable string.

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 290
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 290
    Points : 1 941
    Points
    1 941
    Par défaut
    Trouvé sur stackoverflow, fonctionne bien en UTF8, UTF16 Little Endian, par contre en UTF16 big Endian, il y a des corrections à faire, pas testé en UTF32:
    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
     
    function LoadFile(const fn: string): WideString;
    var
      f:TFileStream;
      src:AnsiString;
      wx:word;
      i,j:integer;
    begin
      if FileExists(fn) then
       begin
        f:=TFileStream.Create(fn,fmOpenRead or fmShareDenyNone);
        try
          f.Read(wx,2);
          if wx=$FEFF then
           begin
            //UTF16
            i:=(f.Size div 2)-1;
            SetLength(Result,i);
            f.Read(Result[1],i*2);
            //detect NULL's
            for j:=1 to i do if Result[j]=#0 then Result[j]:=' ';//?
           end
          else
           begin
            i:=0;
            if wx=$BBEF then f.Read(i,1);
            if (wx=$BBEF) and (i=$BF) then
             begin
              //UTF-8
              i:=f.Size-3;
              SetLength(src,i);
              f.Read(src[1],i);
              //detect NULL's
              for j:=1 to i do if src[j]=#0 then src[j]:=' ';//?
              Result:=UTF8Decode(src);
             end
            else
             begin
              //assume current encoding
              f.Position:=0;
              i:=f.Size;
              SetLength(src,i);
              f.Read(src[1],i);
              //detect NULL's
              for j:=1 to i do if src[j]=#0 then src[j]:=' ';//?
              Result:=src;
             end;
           end;
        finally
          f.Free;
        end;
       end
      else
        Result:='';
    end;

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 12
    Points
    12
    Par défaut Solution trouvée
    Merci mais je viens de trouver la solution, ça suffit de considérer au lieu des char des widechar puis les concaténer dans un widestring et le convertir en string
    Merci pour votre aide contente de faire partie de ce forum

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 29/05/2010, 12h19
  2. Comment lire un fichier XML et l'écrire dans une variable XML en C#
    Par Bonne Année dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/01/2009, 13h34
  3. Réponses: 0
    Dernier message: 16/01/2009, 15h15
  4. Réponses: 5
    Dernier message: 21/02/2007, 16h12
  5. Réponses: 10
    Dernier message: 10/02/2007, 18h44

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