ECRITURE ET TRI FICHIER [Résolu]

didou2dek 47 Messages postés lundi 9 septembre 2002Date d'inscription 16 avril 2015 Dernière intervention - 28 oct. 2008 à 15:26 - Dernière réponse : didou2dek 47 Messages postés lundi 9 septembre 2002Date d'inscription 16 avril 2015 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 29 oct. 2008 à 13:36
3
Merci
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="" />

Merci Cirec 3

codes-sources a aidé 87155 internautes ce mois-ci

Commenter la réponse de Cirec
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 28 oct. 2008 à 19:36
0
Merci
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
Commenter la réponse de cs_cantador
didou2dek 47 Messages postés lundi 9 septembre 2002Date d'inscription 16 avril 2015 Dernière intervention - 28 oct. 2008 à 21:46
0
Merci
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
Commenter la réponse de didou2dek
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 oct. 2008 à 08:58
0
Merci
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
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 29 oct. 2008 à 14:43
0
Merci
@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
Commenter la réponse de cs_cantador
didou2dek 47 Messages postés lundi 9 septembre 2002Date d'inscription 16 avril 2015 Dernière intervention - 29 oct. 2008 à 23:35
0
Merci
@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
Commenter la réponse de didou2dek

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.