Retour chariot sur dernière ligne d'un fichier

Résolu
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008 - 10 janv. 2007 à 14:16
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 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

12 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 16:23
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

3
ndsaerith Messages postés 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 2
10 janv. 2007 à 15:04
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 [;)]
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 15:20
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

0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
10 janv. 2007 à 15:25
 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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
10 janv. 2007 à 15:26
Cirec a été plus rapide
avec toujours de bonnes idées
0
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
10 janv. 2007 à 15:57
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);
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
10 janv. 2007 à 16:07
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
0
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
10 janv. 2007 à 16:31
avec ton code, cela me rajoute systématiquement une ligne blanche que j'ai un retour chariot ou non dans le fichier.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 16:35
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" />
0
furax13 Messages postés 90 Date d'inscription mardi 28 octobre 2003 Statut Membre Dernière intervention 24 avril 2008
10 janv. 2007 à 16:39
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;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 16:45
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

0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
11 janv. 2007 à 02:35
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;

0
Rejoignez-nous