ECRITURE ET TRI FICHIER

Résolu
didou2dek Messages postés 45 Date d'inscription lundi 9 septembre 2002 Statut Membre Dernière intervention 16 avril 2015 - 28 oct. 2008 à 15:26
didou2dek Messages postés 45 Date d'inscription lundi 9 septembre 2002 Statut Membre Dernière intervention 16 avril 2015 - 29 oct. 2008 à 23:35
Bonjour à tous, j'ai un souci avec un prog que j'essaie d'améliorer je coince sur le tri d'un fichier txt.
je travaille avec cet ex de file :
[PROJET]
electricité
maçonnerie
enduit
.....
[PLANNING]
20081020 0900 1100 didier
20081022 1000 1200 henri
20081022 1330 1800 maison perso
20081022 0830 0900 recup matériau
[FIN]

ce fichier est rafraichi en permanence et à chaque fois que je note un nouveau RDV, mon probleme est qu'il ecrit le fichier dans l'ordre ou je prends le RDV mais dans la section PLANNING on s'aperçoit qu'il ne me les tri pas en fonction de l'heure ce qui est génant car car j'utilise un affichage et que je viens piocher dans ce fichier il me donne les RDV tel qu'il les lit (ex pour le 20081022 il va m'afficher le RDV de 8h30 apres celui de 13h30)
je voudrais donc trier par heure croissant uniquement la section entre [planning] et [fin].
j'ai déja commencé à travailler en affectant tout dans une tstringlist.

ftstring : tstrings;
begin
ftstring:=tstringlist.create;
ftstring.loadfromfile(mon fichier)
tstringlist(ftstring).sort
ftstring.savetofile(....)
end;

mon pb c'est qu'il me tri tout et meme [PROJET] qui ne doit pas etre touché et tout est dans le désordre ça ne va pas je dois pouvoir trier uniquement la partie qui se trouve entre planning et fin....

merci à celui qui pourra me donner un coup de pouce à ce sujet

Cordialement

didou

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
29 oct. 2008 à 13:36
Salut,

@Cantador:
le problème ici est que ce n'est pas un vrai fichier INI ... bien qu'il en ait l'aspect ce n'en est pas un ^^

voici une solution qui est adapté au problème de Didou2dek:
ps: le fichier texte est déjà chargé dans le TMemo
{—————————————————————————————————————————————————————————————————————————}
{ Project : Demo.dpr                                                      }
{ Comment : Tri une partie d'un fichier texte                                                              }
{                                                                         }
{    Date : 29/10/2008 13:22:30                                           }
{  Author : Cirec                                                         }
{—————————————————————————————————————————————————————————————————————————}
{ Last modified                                                           }
{    Date : 29/10/2008 13:22:30                                           }
{  Author : Cirec                                                         }
{—————————————————————————————————————————————————————————————————————————}
unit UMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  Tfrm_Main = class(TForm)
    Memo1: TMemo;
    btn_Sort: TButton;
    procedure btn_SortClick(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  frm_Main: Tfrm_Main;
procedure SortListBetween(aStart, aStop: Integer; aList: TStrings); overload;
procedure SortListBetween(aStart, aStop: string; aList: TStrings);  overload;

implementation

{$R *.dfm}
procedure ExchangeInt(var aStart, aStop: Integer);
var TmpInt: Integer;
begin
  TmpInt := aStart;
  aStart := aStop;
  aStop := TmpInt;
end;

procedure SortListBetween(aStart, aStop: Integer; aList: TStrings);
var
  TmpList: TStringList;
  iI: Integer;
begin
  {Il faut au moins 2 entrée sinon on sort}
  if aList.Count < 2 then Exit;
  {Vérification des limites}
  if aStart > aStop then
    ExchangeInt(aStart, aStop);
  if aStop > aList.Count then
    aStop := aList.Count;
  if aStart < 0 then
    aStart := 0;
  {Début du tri}
  TmpList := TStringList.Create;
  try
    aList.BeginUpdate;
    with TmpList do
    begin
      Sorted := True;
      for iI := aStop-1 downto aStart+1 do
      begin
        Add(aList[iI]);
        aList.Delete(iI);
      end;
      for iI := Count-1 downto 0 do
        aList.Insert(aStart+1, Strings[iI]);
    end;
  finally
    TmpList.Free;
    aList.EndUpdate;
  end;
end;

procedure SortListBetween(aStart, aStop: string; aList: TStrings);  overload;
begin
  SortListBetween(aList.IndexOf(aStart), aList.IndexOf(aStop), aList);
end;

procedure Tfrm_Main.btn_SortClick(Sender: TObject);
begin
  SortListBetween('[PLANNING]', '[FIN]', Memo1.Lines);
  //SortListBetween('[FIN]', '[PLANNING]', Memo1.Lines);
end;

end.

 
@+
Cirec

<hr siz="" />
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 oct. 2008 à 19:36
bonsoir,
mon pb c'est qu'il me tri tout et meme [PROJET] qui ne doit pas etre touché et tout est dans le désordre ça ne va pas je dois pouvoir trier uniquement la partie qui se trouve entre planning et fin....

forcément tu fais un loadfromfile, comment veux-tu que le programme fasse le tri? 
il faut lire uniquement la section "[PLANNING]"..

Pour ça voir la gestion des fichiers INI

cantador
0
didou2dek Messages postés 45 Date d'inscription lundi 9 septembre 2002 Statut Membre Dernière intervention 16 avril 2015
28 oct. 2008 à 21:46
bonsoir Cantador,
mais l'utilisation des fichiers ini sert uniquement à récupérer une valeur se situant dans une rubrique que l'on veut exploiter, comment faire pour lui dire qu'apres ma "rubrique [planning]" je veux récupérer tout ce qui se trouve apres et ensuite le trier tout en gardant la structure dur fichier txt car il doit trier mais rester à la meme position et meme ordre ?

je nage un peu dans l'utilisation de ces fichiers txt en ecriture/lecture si tu peux me donner un tuyau ou une aide de code cela m'avancerait pas mal

merci par avance

didou
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 oct. 2008 à 08:58
http://delphi.about.com/sitesearch.htm?terms=ini&SUName=delphi&TopNode=99




http://delphi.developpez.com/faq/index.php?rechercher=ini



Il faut chercher car la plupart du temps, ce que tu souhaites faire a déjà été réalisé...

cantador
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
29 oct. 2008 à 14:43
@cirec
J'avais vu aussi que le fichier n'avait pas la tête d'un ini...
j'espérai qu'il le découvre avec les liens..
En tout cas ta solution est excellente car du coup il n'y a plus à se soucier de la gestion du fichier.

cantador
0
didou2dek Messages postés 45 Date d'inscription lundi 9 septembre 2002 Statut Membre Dernière intervention 16 avril 2015
29 oct. 2008 à 23:35
@Cirec
Merci beaucoup mon ami, un vrai coup de chapeau pour toi tu m'as bien aidé, j'avoue que c'est un peu complexe pour moi mais je vais bosse à fond sur ce code pour en comprendre toutes les subtilités.
Encore merci heureusement qu'il y a des gens comme toi pour aider des débutants comme moi !!

@+

didou
0
Rejoignez-nous