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

furax13 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 10 janv. 2007 à 14:16 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention
- 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 

12 réponses

Répondre au sujet
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 10 janv. 2007 à 16:23
+3
Utile
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

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
ndsaerith 307 Messages postés vendredi 16 janvier 2004Date d'inscription 10 mai 2017 Dernière intervention - 10 janv. 2007 à 15:04
0
Utile
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 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 10 janv. 2007 à 15:20
0
Utile
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 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 10 janv. 2007 à 15:25
0
Utile
 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 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 10 janv. 2007 à 15:26
0
Utile
Cirec a été plus rapide
avec toujours de bonnes idées
Commenter la réponse de cs_Jean_Jean
furax13 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 10 janv. 2007 à 15:57
0
Utile
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 1792 Messages postés vendredi 27 décembre 2002Date d'inscription 12 novembre 2016 Dernière intervention - 10 janv. 2007 à 16:07
0
Utile
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 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 10 janv. 2007 à 16:31
0
Utile
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 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 10 janv. 2007 à 16:35
0
Utile
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 90 Messages postés mardi 28 octobre 2003Date d'inscription 24 avril 2008 Dernière intervention - 10 janv. 2007 à 16:39
0
Utile
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 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 10 janv. 2007 à 16:45
0
Utile
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 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 11 janv. 2007 à 02:35
0
Utile
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.