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 :

Calcule la taille d’un flux


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Par défaut Calcule la taille d’un flux
    Bonjour,

    Je veux exploiter un flux à partir d’un port Com j’ai utilisé le composant Comport pour le traité j’affiche le résultat dans un Memo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      ComPort1.ReadStr(Str, Count);
      Memo1.Text := Memo1.Text + Str;
    Et j’enregistre les données qui se trouvent dans le Memo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Memo1.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'Fichier'+'.txt');
    Mais après un moment (hight trafic ) le memo perde certaine données comment je peux calculer le flux reçu afin de ne pas perde aucune donnée et paramétrer le sauvegarde c-t-d : après 30 KO je déclenche un sauvegarde.

    Merci d'avance.

  2. #2
    Membre averti Avatar de JakRenegade
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 33
    Par défaut
    Tout d'abord es tu sur que c'est ton mémo qui perd les données?

    As tu vérifié que les données arrivent complétement dans le mémo? Car elles auraient pu être perdues dans le transfert sur le portCom.

    J'imagine que le read de ton portCom se trouve dans une boucle. Si c'est le cas, avant la fin de la boucle, fait un test sur un compteur. A chaque x tour de boucle, tu enregistre.

    Mais difficile de t'aider avec si peux d'informations sur le reste de ton code. Essaie de nous fournir plus de code concernant ton problème (en évitant un copier/coller de l’intégralité de ton application).

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 100
    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 100
    Par défaut
    Pense qu'un Memo pour le stockage, c'est pas léger
    Pense que Memo1.Text := Memo1.Text + Str;, c'est couteux, cela réalloue une chaine de la taille de Text + Str (donc à un instant T, il y a la fois Text, Str et Text + Str en mémoire), une fois l'affectation faite, l'ancien Text est libéré, bon c'est le TMemo donc c'est Windows qui gère sa mémoire à sa façon
    La limite doit être de 32Ko c'est une limitation Windows pour le TMemo

    Tu peux utiliser un TStringList et la méthode Lines.Add()
    Add() est plus performant que Text
    Avec un Capacity défini à 10000 par exemple, cela se plus performant
    une Fois Count=Capacity, tu fais le SaveToFile

    C'est déjà plus léger et tu n'auras pas la limitation Windows, tu pourras monter à des millions de lignes (théorique)

    Attention, Compter via un Length la taille de Text est une opération lente car il doit gérer la chaine en parcourant Lines[]
    Mieux vaut que tu gères toi même toi compteur de caractère reçu
    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 éclairé
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Par défaut
    Merci pour vos réponses

    Citation Envoyé par JakRenegade Voir le message
    Tout d'abord es tu sur que c'est ton mémo qui perd les données?
    Oui puisque j'ai l'application mère qui gère les mêmes données et j'ai fait tout simplement une comparaison (Trafic des appels téléphoniques).

    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
     
    P,G:integer;
    begin
     t:=TStringList.Create;    
     for g:=0 to Memo1.Lines.Count - 1 do
     begin
       t.Add(Memo1.Lines.Strings[g]);
        end;
       Memo1.Clear;
       for P:=0 to G -1 do          //Delete all space in Stringlist
       begin
       L:=t.Strings[P];
       if   l <>'' then  s.Add(L);
       end;
       S.SaveToFile(ExtractFilePath(Application.ExeName)+ 
       'Final'+'.txt');t.free;
    end;
    Citation Envoyé par ShaiLeTroll Voir le message
    Tu peux utiliser un TStringList et la méthode Lines.Add()
    Add() est plus performant que Text
    Possible que le Ligne.add() plus performant que .Text mais avec Text j’ai le format de fournisseur de la solution Exp :
    Avec Text :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    N 021 00 24504   T037021 04/11 16:22 00:02:40 A 8098383883
     &       0000    0000
    Avec Ligne.add() j’ai cette format ,est plus compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    N 026 
    00 T014
    010 T035
    11 16:50
     00:00:4
    0 A 8077
    0901116

  5. #5
    Membre éclairé
    Homme Profil pro
    J'aime la programmation avec Delphi
    Inscrit en
    Avril 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : J'aime la programmation avec Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 227
    Par défaut
    Est-ce qu’il avec l’utilisation de Stream résoudre le problème j’imagine que ayant le même fonctionnement ?

Discussions similaires

  1. Comment calculer la taille d'une base de données ?
    Par say dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 01/04/2011, 16h48
  2. [Http/JSP] : Taille du flux envoyé
    Par gex77 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/05/2006, 11h53
  3. Calculer la taille d'un texte dans un DC
    Par vanitom dans le forum MFC
    Réponses: 9
    Dernier message: 28/10/2005, 15h32
  4. Réponses: 9
    Dernier message: 13/09/2005, 17h14
  5. Calculer la taille d'une image
    Par bigourson dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/09/2005, 11h22

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