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

Turbo Pascal Discussion :

[TP] Comment contourner la limite de taille des variables ?


Sujet :

Turbo Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [TP] Comment contourner la limite de taille des variables ?
    Bonjour,


    Je souhaiterais fusionner la première ligne d'un fichier texte avec la première ligne d'un second fichier texte. Pour cela, j'ai affecté la première ligne de mon fichier dans une variable de type string. Mais le problème c'est qu'un string se limite à 256 caractères or j'en ai au moins 5000 dans un des fichiers. Ya t'il un moyen de contourner ce problème?

    Merci d'avance

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Hio,

    La limite est en fait 255 caractères

    La réponse dépend fortement du compilateur que tu utilises, donc un peu plus d'information ne nuira pas.

  3. #3
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    bonjour
    tu pourais aussi lire mot par mot au lieu de lire toute une ligne et la un mot du mois dans ce monde ne comporte plus de 255 caracteres,
    je crois que si j'ai bien compris ta question il serait mieux de lire un mot par mot jusqu"a la fin de la ligne.
    @+

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Il faudrait regarder du côté des PChars, mais plus d'indications sur le compilateur utilisé seraient pas de refus !

  5. #5
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonsoir,
    Tu as un fichier texte ; tu n’as qu’une ligne et elle fait pus de 5000 caractères.
    Une solution serait de copier caractère par caractère (et non mot à mot car un mot c'est 16 bits et je ne vois pas l'utilité d'une telle division).

    Voici un exemple de code fonctionnel; (ceci n’est qu’un exemple):
    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
    var FichierText1    : File of CHAR;
        FichierText2    : File of CHAR;
        FichierDeSortie : File of CHAR;
        c : CHAR;
     
    begin
      // Ouverture de 'FichierText1.txt' en lecture
      assign(FichierText1,'FichierText1.txt');
      reset(FichierText1);
     
      // Ouverture de 'FichierText2.txt' en lecture
      assign(FichierText2,'FichierText2.txt');
      reset(FichierText2);
     
      //Création de 'FichierDeSortie.txt'
      assign(FichierDeSortie,'FichierDeSortie.txt');
      rewrite(FichierDeSortie);
     
      while not EOF(FichierText1) do
      begin
        read(FichierText1,c);
        write(FichierDeSortie,c);
      end;
     
      while not EOF(FichierText2) do
      begin
        read(FichierText2,c);
        write(FichierDeSortie,c);
      end;
     
      // Fermeture
      close(FichierDeSortie);
      close(FichierText2);
      close(FichierText1);
     
    end.
    Remarque : J’évite soigneusement d’utiliser un compteur pour éviter tt débordement.
    Je n’ai pas mis de directive {I-}...{I+}, je suppose que ces fichiers existes et qui ne sont pas verrouillés en lecture.
    Si jamais ton fichier est trop gros et qui faut régulièrement vider le buffer, il faudra utiliser flush, je suppose que ce ne sera pas le cas.

    En espérant t’avoir aidé...
    @+

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait j'utilise le compilateur Turbo pascal for windows

    Merci beaucoup pour ces réponses, j'ai testé la solution que tu proposes, mais le problème c'est que mon fichier contient 700 lignes de 5000 caractères. En utilisant les char, ça recopie bien mon texte mais comment faire ligne par ligne? Puisque là, il colle le texte2 en desosus du premier.

    Voici un exemple de ce que je veux faire, je pense que je ne suis pas très claire). Je veux coller mes clefs <ident etc...> avant le texte qui comporte le même numéro.
    Encore merci d'avance pour votre aide précieuse



    § < ident = 1 > <sexe= femme >
    1 Au sujet des examens, les résultats de la deuxième session se font attendre. Je préférerai une deuxième session en septembre. Les locaux sont dans un sale état, les espaces fumeurs ne sont jamais respectés, c'est désagréable pour les non-fumeurs qui veu
    § < ident = 3 > <sexe= homme > <age= 21_25_ans>
    3 "La mise en place de la réforme LMD pose de nombreux problèmes. L'unité six pose de nombreux problèmes (quelles sont les unités/ matières autorisées, il n'y a aucun moyen de le savoir, établir un liste complète serait judicieux). Changer le logiciel de
    § < ident = 4 > <sexe= femme > <age= 21_25_ans>
    4 Dans l'ensemble la fac est bien mais je trouve (surtout pour la première année de Licence en psychologie) que l'information et l'organisation ne sont pas au point. Ex: pas de convocations pour les examens, l'affichage de l'emploi du temps, les résultats
    § < ident = 6 > <sexe= femme > <age= plus_de_25_ans>
    6 Je pense qu'il pourrait y avoir plus d'espaces verts au sein de l'université.
    § < ident = 7 > <sexe= femme > <age= 21_25_ans>
    7 Je vais en cours dans le bâtiment B et les amphis sont vraiment pourris, il fait froid, on entend rien, on est mal assis, c'est la misère. Les infos ne circulent pas, le secrétariat est fermé 2 jours/s et quand il est ouvert y a pas moyen de saisir quel
    § < ident = 10 > <sexe= femme > <age= plus_de_25_ans>
    10 De manière générale, je constate que reprendre des études durant une activité professionnelle régulière est rare, dommage ! Peut être y a t-il un manque ou une voie en développement. Enfin, je souhaite préciser que le secrétariat spécifique à l'ISAS= a
    § < ident = 14 > <sexe= femme > <age= 21_25_ans>
    14 -Fumer tue- et pourtant l'université Lille 3 laisse les étudiants fumeurs envahir les lieux sans parler des profs et personnel qui fument sans se soucier des désagréments qu'ils entrainent. De plus, les locaux sont laids, l'architecture n'avait aucun g
    § < ident = 15 > <sexe= femme > <age= moins_de_21_ans>
    15 La mise en place du système LMD, ou du moins sa mise en pratique est loin d'être au point, les options (unité 6 en particulier) sont mal élaborée et à mon sens inutile et très mal adaptée du point de vue des horaires.
    § < ident = 18 > <sexe= femme > <age= 21_25_ans>
    18 Il est regrettable qu’à chaque fois qu'il neige, qu'un service ne pense pas à saler, le sol est plus que dangereux, il faudrait aussi penser à nettoyer l'établissement, par exemple des poubelles qui restent 15 jours sans être changé, c'est déplorable.
    § < ident = 22 > <sexe= femme > <age= moins_de_21_ans>
    22 Je tiens à signaler que la température des amphis, salles de cours et BU est inacceptable en hiver (soit trop froid, soit chaleur insoutenable). Les zones non fumeurs sont trop peu nombreuses et mal reparties. Il ne faut alors pas s'étonner que tout le
    § < ident = 24 > <sexe= femme > <age= 21_25_ans>
    24 Pour la part, je suis très déçu concernant le programme d'échange ERASMUS. C'est un projet qui vaut la peine mais les coordinateurs ne sont à leur place malheureusement. Nous ne disposons d’aucune information concernant les démarches administratives af
    § < ident = 37 > <sexe= homme > <age= plus_de_25_ans>
    37 J'ai répondu à toutes les questions, cependant mon cas est assez particulier et ne reflète pas forcement les moyens et les états d'esprits des étudiants dits -normaux-. J'ai repris mes études après 4 ans d'activités et je suis propriétaire de mon logem

  7. #7
    Membre actif Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Points : 261
    Points
    261
    Par défaut
    Bonjour,
    Si je comprends bien, il y a deux fichiers ; un fichier qui contient des :
    § < ident = 1 > <sexe= femme >
    § < ident = 3 > <sexe= homme > <age= 21_25_ans>
    § < ident = ...
    ...
    et un autre qui contient des :
    1 Au sujet des examens, les résultats de la deuxième session se font attendre. Je préférerai une deuxième session en septembre. Les locaux sont dans un sale état, les espaces fumeurs ne sont jamais respectés, c'est désagréable pour les non-fumeurs qui veu
    2 ...
    Est-ce qu'on doit considérer que les chiffres peuvent être désordonnés ?
    Est-ce que les fichiers originaux sont des fichiers d'enregistrement ?

    En bref dis nous comment sont codés tes fichiers et on pourra te dire comment les travailler.
    Le lus simples serait bien évidemment (comme d’ab) que tu nous montres ce que tu as déjà faite.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Voici mon programme, pour les fichiers c'est bien ça.
    Ils sont ordonnés, la première ligne du 1 correspond à la première ligne du 2 etc...Ils sont ordonnés de la même manière.
    Par enregistrement tu entends que j'ai découpé le texte en plusieurs types variables avant (du style ident : integer texte: string)?. Si c'est ça, non ce n'est pas des enregistrements.
    En fait il s'agit d'une base de données que j'ai récupérée en fichier texte (pour les discours)
    et pour les clefs c'est issu d'un fichier excel que j'ai copier/ coller. Je sais pas si c'est ça que tu voulais savoir?
    encore merci pour ton aide


    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
    program fusion;
    var
    s,t: string       ;
    liste,liste2, liste3 : text ;
     
     
    begin
     
    Assign(liste,'c:\Documents and Settings\cc\Bureau\réponses ouvert\reponses.txt');
    assign(liste3,'c:\Documents and Settings\cc\Bureau\réponses ouvert\resultat.txt');
    assign(liste2,'c:\Documents and Settings\cc\Bureau\réponses ouvert\clefs.txt'); 
    reset (liste);
    reset (liste2);
    rewrite(liste3);
     
     
     
            while not eof (liste) or not eof(liste2) do
                  begin  
                  readln (liste, s) ;    
                  writeln (liste3, s);
                  readln (liste2, t);
                  writeln (liste3, t);
     
                  end;
     
     
    close (liste);
    close (liste2);
    close (liste3);
     
     
     
    end.

  9. #9
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Regarde du côté de la fonction eoln, et pense à faire une copie caractère par caractère

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 651
    Points : 11 145
    Points
    11 145
    Par défaut
    avec BlockWrite et BlockRead celinec62 peut sans doute s'en sortir.

    http://cyberzoide.developpez.com/inf.../chap10.php3#2

    Je constate également que ces fichiers sont bien structurés donc en utilisant un record (au moins pour le 1er fichier) ?
    (rien n'interdit un record consitué de string....)

  11. #11
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    Une autre alternative à eoln (mais moins jolie quand même) serait de repérer toi-même les fins de ligne sachant qu'une fin de ligne est repérée par :
    • les caractères 13 puis 10 sous Windows
    • le caractère 10 sous linux/Unix
    • le caractère 13 sous Mac (qui est aussi un Unix mais bon...)


    PS :
    tu peux connaître la valeur ASCII d'un caractère grace à la fonction ord(ton_char).

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Laq,
    Citation Envoyé par Auteur
    avec BlockWrite et BlockRead celinec62 peut sans doute s'en sortir.

    http://cyberzoide.developpez.com/inf.../chap10.php3#2

    Je constate également que ces fichiers sont bien structurés donc en utilisant un record (au moins pour le 1er fichier) ?
    (rien n'interdit un record consitué de string....)
    Oui, mais pour lire des record dans un fichier, il faut que ce fichier ait été construit pour.
    Cela implique une taille constante pour chaque enregistrement, ce qui n'est pas le cas, sans parler des retours de ligne qui ne feraient pas partie du record.

    Citation Envoyé par Loceka
    Une autre alternative à eoln (mais moins jolie quand même) serait de repérer toi-même les fins de ligne sachant qu'une fin de ligne est repérée par :

    * les caractères 13 puis 10 sous Windows
    * le caractère 10 sous linux/Unix
    * le caractère 13 sous Mac (qui est aussi un Unix mais bon...)

    PS :
    tu peux connaître la valeur ASCII d'un caractère grace à la fonction ord(ton_char).
    Le côté Unix des Mac n'est pas vrai pour nombre de Mac encore en usage.

    Quant à savoir quel le système utilisé comme fin de ligne, il suffit d'ouvrir un des fichiers avec un éditeur digne de ce nom, c'est à dire sachant également afficher en hexa, et regarder ce qu'il en est.
    C'est probablement ainsi que j'aurais fait, mais chercher chacun des séparateurs possibles n'est pas faux, et rendra le code éventuellement réutilisable, même si l'expérience montre qu'on ne réutilise pratiquement jamais le code de ce genre de petit programme écrit pour traiter un cas ponctuel.

  13. #13
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Ben c'est justement pour ça que c'est moins joli eoln doit être multiplateforme non ? selon la target sélectionnée lors de la compilation ?

Discussions similaires

  1. comment limiter la taille des tables myisam
    Par galsen3 dans le forum MySQL
    Réponses: 1
    Dernier message: 11/06/2009, 09h36
  2. Limite en taille des variables Globalmemorystatus
    Par rgourlet dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2008, 11h23
  3. Réponses: 1
    Dernier message: 03/04/2006, 17h47
  4. Limiter la taille des lignes dans un TMemo
    Par butch dans le forum Composants VCL
    Réponses: 5
    Dernier message: 29/03/2006, 13h08
  5. [ Eclipse2.1 ][ Plugin ] limiter la taille des boutons
    Par whilecoyote dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/11/2005, 16h08

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