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

Langage Delphi Discussion :

lecture d'une matrice dans fichier texte


Sujet :

Langage Delphi

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut lecture d'une matrice dans fichier texte
    Bonjour.
    Je cherche une solution pour lire un tableau rectangulaire qui est enregistré dans un fichier texte, pour pouvoir le mettre dans un tableau f (array of array).
    Le fichier contient des valeurs sur n lignes et m colonnes.
    Comment puis je procéder pour remplir case par case mon tableau f à partir du fichier ?
    Je connais la fonction readln(a,b) par exemple pour deux colonnes, et qui va lire ligne par ligne dans une boucle. Mais je ne sais pas comment faire pour n colonnes. Je veux pouvoir remplir f[n,m] dans une boucle.
    merci d'avance pour vos conseils

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Je ne connais pas la structure de ton fichier mais je pense que le plus simple est de passer par une tStringList (function loadFromFile) qui récupère les lignes.
    Puis de récupérer, ligne par ligne, les colonnes avec une autre tStringList en utilisant la fonction commatext pour transformer la ligne en tStringList.
    Attention commatext pose un problème si il y a des espaces dans les lignes lues.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Les Delphi récents fournissent la fonction SplitString plus simple que la vieille ExtractStrings

    CommaText ou DelimitedText avec un StrictDelimited à true, fait aussi l'affaire !
    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

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    @ShaiLeTroll
    Certes mais StrictDelimited n'existe pas (hélas !!) dans toutes les versions.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    StrictDelimiter, c'est assez récent oui, D2005 non ?
    A ce problème, il y a ExtractStrings qui existe au moins de depuis D4 !

    ExtractStrings utilise des PChar, c'est un peu con, et n'était pas extrêmement rapide en D5, d'où mon propre Explode
    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

  6. #6
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    ExtractString ? J'avais jamais vu !!
    Bon comme tout le monde je me suis fait mon Explode à moi...avec un objectif de perf. ça ne colle pas à tous les cas de figures mais bon.

    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
     
    procedure Explode(sIn :String; tsOut : tstringlist; const separ : string=';');
    //Splitte sIn en fonction de separ dans la tStringList tsOut
    //Un peu style commatext mais sans le "bug" de l'espace..
     var iPos :Integer;
    begin
      tsOut.Clear;
      iPos := pos(separ, sIn);
      While iPos <> 0 do
      begin
        tsOut.Add(copy(sIn,1,ipos-1));
        sIn:= Copy(sIn, iPos+1,length(sIn));
        iPos := pos(separ, sIn);
      end;
      if sIn <> '' then
        tsOut.Add(sIn);
    end;

Discussions similaires

  1. Ecrire une matrice dans un fichier texte
    Par tiouba dans le forum MATLAB
    Réponses: 5
    Dernier message: 20/04/2012, 14h26
  2. Sauvegarde d'une matrice dans un fichier text
    Par Christinita dans le forum MATLAB
    Réponses: 5
    Dernier message: 01/12/2008, 10h27
  3. Réponses: 5
    Dernier message: 05/04/2008, 12h49
  4. Réponses: 3
    Dernier message: 29/11/2007, 15h50
  5. Réponses: 1
    Dernier message: 26/09/2007, 19h55

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