Retour chariot sur dernière ligne d'un fichier [Résolu]

furax13
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- 10 janv. 2007 à 14:16 - Dernière réponse : f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 11 janv. 2007 à 02:35
bonjour,
j'ai déclaré une variable FicCsvResultOptim de type text
j'utilise les méthode 
  AssignFile(FicCsvResultOptim, nomFichierRecuit);
  reset(FicCsvResultOptim);




   j'aimerai me positionner sur la dernière ligne du fichier et ajouter si besoin est un retour chariot sur cette ligne.

Comment faire?

merci pour votre aide.

emmanuel
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 janv. 2007 à 16:23
3
Merci
oui effectivement la StringList ajoute automatiquement
un retour chariot au moment de la sauvegarde

je ne le savais même pas !!!
je viens de découvrir la chose ... Alors Bug ou pas Bug

Enfin toujours est il ... tu corriges comme suit et ça fonctionne (j'ai testé cette fois  )

procedure TfrmMain.Button1Click(Sender: TObject);
Var  SL : TStringList;
        Txt : String;
Begin
  {On crée la StringList}
  SL := TStringList.Create;
  With SL do Try
    {On charge le texte depuis le fichier}
    LoadFromFile('Nom_Du_Fichier_Texte.txt');
    {Récupère la dernièrre ligne dans Txt}
    Txt : = Strings[Count - 1];
    {Ajoute une ligne Vide à la fin du Fichier si elle n'éxiste pas}
    If Txt <> EmptyStr Then
      SaveToFile('Nom_Du_Fichier_Texte.txt');
  Finally
   {Ne jamais oublier de liberer}
    Free;
  End;
End;

 
@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Cirec
ndsaerith
Messages postés
307
Date d'inscription
vendredi 16 janvier 2004
Dernière intervention
10 mai 2017
- 10 janv. 2007 à 15:04
0
Merci
Alors pour ce qui est du retout chario, c'est comme pour ecrire sauf que tu met une chaine vide.
Pour ça faut déclarer un string et faire :
   machaine='';
   writeln (monfichier, mastring);

Pour aller à la fin du fichier je ne sais pas.. Je sais comment savoir si on est à la  fin (avec eof) mais c'est tout.

Vala ^^

BIz [;)]
Commenter la réponse de ndsaerith
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 janv. 2007 à 15:20
0
Merci
Salut,

pourquoi ne pas utiliser un TStringList ?

Ex:
procedure TfrmMain.Button1Click(Sender: TObject);
Var  SL : TStringList;
        Txt : String;
Begin
  {On crée la StringList}
  SL := TStringList.Create;
  With SL do Try
    {On charge le texte depuis le fichier}
    LoadFromFile('Nom_Du_Fichier_Texte.txt');
    {Récupère la dernièrre ligne dans Txt}
    Txt : = Strings[Count - 1];
    {Ajoute une ligne Vide à la fin du Fichier si elle n'éxiste pas}
    If Txt <> EmptyStr Then Begin
      Add('');
      {Il faut sauvegarder les modifications}
      SaveToFile('Nom_Du_Fichier_Texte.txt');
    End;
  Finally
   {Ne jamais oublier de liberer}
    Free;
  End;
End;

 
@+
Cirec

Commenter la réponse de Cirec
cs_Jean_Jean
Messages postés
639
Date d'inscription
dimanche 13 août 2006
Dernière intervention
5 mai 2016
- 10 janv. 2007 à 15:25
0
Merci
 bj ndsaerith

Pour aller en fin de fichier texte : SeekEof(F);
Les instruction de fichiers sont accompagnées d'exemple en général : => F1
Pour ajouter un retour ligne, tu peux ajouter le code ascii #13#e d'une ligne10 (ou chr(13)+chr(10)); // retour ligne + descente d'1 ligne

A+
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean
Messages postés
639
Date d'inscription
dimanche 13 août 2006
Dernière intervention
5 mai 2016
- 10 janv. 2007 à 15:26
0
Merci
Cirec a été plus rapide
avec toujours de bonnes idées
Commenter la réponse de cs_Jean_Jean
furax13
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- 10 janv. 2007 à 15:57
0
Merci
De temps en temps, le fichier que je dois traiter est de la sorte :
La dernière ligne n'a pas de retour chariot.
Avec le code de cirec, que j'ai testé, dans tous les cas, il me rajoute une ligne blanche.

 #Creation date;
02/01/2007 15:28:26;
#Optimization mode (Stack=1 ou Coil=2);
2;
#Annealing number;Annealing Code;Base type;
J2c164t104;104dssc;bremen_1_4;
#Ordered list of the coils in the stack
#number of coils;
2;
#Coil number;Weight(Kg);External Diameter(mm);Width(mm);Thickness(mm);Annealing Code;
724738x000; 33680;1845;1807;0.910;104dssc;
724769x000; 33660;1766;19970;0.840;104dssc;
#Number of measurement points;
0;
#Ordered list of the measurement points;
#Time(s);Regulation sensor T°(°C);Safety sensor T° (°C);Fuel gas flow(Nm3/h);Air flow(Nm3/h);
Commenter la réponse de furax13
japee
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 10 janv. 2007 à 16:07
0
Merci
Salut,


J'avais fait ce code qui ressemble fort à la méthode à Cirec, si ça peut résoudre :

procedure TForm1.Button1Click(Sender: TObject);

const nomFichierRecuit = 'Essai.txt';

var

  List: TStrings;

begin

  List := TStringList.Create;

  with List do

  try

    LoadFromFile(nomFichierRecuit);

    List[Count -1] := List[Count -1] + #13#10;

    SaveToFile(nomFichierRecuit);

  finally

    Free;

  end;

end;


Ca va mieux comme ça ?


Bonne prog'


japee
Commenter la réponse de japee
furax13
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- 10 janv. 2007 à 16:31
0
Merci
avec ton code, cela me rajoute systématiquement une ligne blanche que j'ai un retour chariot ou non dans le fichier.
Commenter la réponse de furax13
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 janv. 2007 à 16:35
0
Merci
Argh...
j'avais pas actualisé la page avant de poster

@Japee  Normalement ta méthode ajoute à tous les coups deux retours chariot si il n'y en a pas en fin de fichier
et un dans le cas contraire.

En fait les deux lignes suivantes ne sont pas néscéssaires :
    Txt := Strings[Count - 1];
    If Txt <> EmptyStr Then

Mais ça évite de faire un Save directement après un Load
et surtout de ne pas sauvegarder si ce n'est pas utile

@ Furax13 :
Avec le dernier code ?
Avec le premier je suis d'accord mais pas le deuxième,
Je viens de faire les testes et ça fonctionne très bien chez moi !!!

 
@+
Cirec

<hr size ="2" />
Commenter la réponse de Cirec
furax13
Messages postés
90
Date d'inscription
mardi 28 octobre 2003
Dernière intervention
24 avril 2008
- 10 janv. 2007 à 16:39
0
Merci
nos différentes réponses se sont téléscopées.
En effet, le code suivant fonctionne parfaitement et répond à mon besoin

Merci pour votre aide

procedure TfrmMain.Button1Click(Sender: TObject);
Var  SL : TStringList;
        Txt : String;
Begin
  {On crée la StringList}
  SL := TStringList.Create;
  With SL do Try
    {On charge le texte depuis le fichier}
    LoadFromFile('Nom_Du_Fichier_Texte.txt');
    {Récupère la dernièrre ligne dans Txt}
    Txt : = Strings[Count - 1];
    {Ajoute une ligne Vide à la fin du Fichier si elle n'éxiste pas}
    If Txt <> EmptyStr Then
      SaveToFile('Nom_Du_Fichier_Texte.txt');
  Finally
   {Ne jamais oublier de liberer}
    Free;
  End;
End;
Commenter la réponse de furax13
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 10 janv. 2007 à 16:45
0
Merci
Je me disais bien ...

Pourrais tu cliquer sur Réponse Accèptée  (à coté de la bonne réponse)
s'il te plait ... Merci

 
@+
Cirec

Commenter la réponse de Cirec
f0xi
Messages postés
4304
Date d'inscription
samedi 16 octobre 2004
Dernière intervention
9 mars 2018
- 11 janv. 2007 à 02:35
0
Merci
moi j'en ai une autre :

comme ça on peu meme le faire sur des fichiers de plusieurs Mo...

var
  vFS : TFileStream;
  vEO : word;
const
  cEO : word = $0A0D;
begin
   vFS := TFileStream.Create(FileName, fmOpenReadWrite);
   try 
     vFS.Position := vFS.Size-3;
     vFS.ReadBuffer(vEO,2);
     if vEO <> cEO then begin
        vEO := cEO;
        vFS.WriteBuffer(vEO,2);
     end;      
   finally
     vFS.Free;
   end;
end;

Commenter la réponse de f0xi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.