Stef38200
Messages postés5Date d'inscriptionjeudi 11 mai 2006StatutMembreDernière intervention 3 août 2006
-
2 août 2006 à 11:22
hackerloc
Messages postés24Date d'inscriptionjeudi 6 mars 2008StatutMembreDernière intervention 9 janvier 2009
-
2 oct. 2008 à 14:23
Bonjours,
Je suis débutant et j'ai un souci !!
Je viens de créer un petit prog avec un Tmemo et un Tbutton qui me sert à sauvegarder se que je met
met dans le Tmemo. Mais lorque j'ouvre le fichier
text avec notepad tout est sur une ligne !!!
Est-ce possible d'avoir un retour chariot tout les
82 caractéres? J'ai regardé toutes les questions du forum se rapportant a mon probléme et j'ai rien
trouvé pouvant m'aidé.
Mon code
procedure TForm1.Button1Click(Sender: TObject);
Procedure SaveMyFile(AFileName : string);
Var
F: TextFile;
i:integer;
Begin
AssignFile(F,AFileName); //<= Petite erreur de ma part
//J'avais un test c'est pour ca : désolé
Rewrite(F);
For i:=0 to Memo1.Lines.Count do
WriteLn(F,Memo1.Lines[i]);
CloseFile(F);
End;
procedure TForm1.Button1Click(Sender: TObject);
Begin
If savedialog1.execute then SaveMyFile(Savedialog1.filename);
Stef38200
Messages postés5Date d'inscriptionjeudi 11 mai 2006StatutMembreDernière intervention 3 août 2006 2 août 2006 à 17:00
Merci à vous de m'avoir repondu.
La reponse de japee j'ai essayé de l'appliquer,
mais je sais pas ou la mettre dans le code ,pareil
pour celle de Loda.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 2 août 2006 à 18:23
Allez, pour une fois: Un code tout fait:
Decoupe le memo en ligne de longeur MAX
implementation
{$R *.dfm}
uses StrUtils;
procedure TForm2.Button1Click(Sender: TObject);
const
MAX = 10;
var
i,j : integer;
L : TStrings; // pour alleger le code
srcStr, tmpStr : string;
begin
// coupe la ligne tout les Max char
L := memo1.lines;
// pour chaque ligne
i := 0;
while i < L.count do begin
// ( on evite de lire des .Count dans des boulce for
// quand on le change dans la boucle -> while)
srcStr := L[i];
// si trop long
if length(srcStr) > MAX then begin
//enlever le string trop long
L.Delete(i);
// le decoupe et ajout les morceau (left to right)
j := i;
while length(srcStr) > MAX do begin
// ajout un bout
tmpStr := LeftStr(srcStr, MAX);
L.Insert(j, tmpStr);
inc(j); // on insert a la suite du dernier insere
// enleve de la source le bout qu'on a ajoute
srcStr := RightStr(srcStr, Length(srcStr)-Max);
end; //while
//insert le dernier bout
L.Insert(j, srcStr);
end;//if
inc(i);
end; //while
L.SaveToFile('test.txt');
end;
valeur de test:
A0123456789
0123456789012345678901234
0123
0123456
012345678901234567890123456789
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 2 août 2006 à 18:46
Salut,
Si c'est un simple problème de présentation avec NotePad :
pour insérer (par touche Enter) des fins de ligne avec retour chariot dans ton TMemo, il te suffit de mettre la propriété WantReturns à true (ou alors l'utilisateur doit taper Ctrl + Enter).
Et dans NotePad : menu Format : coche <retour auto à la ligne>
Tu as plus ou moins la même option dans WordPad.
Procedure SaveMyFile(AFileName : string);
Var
F: TextFile;
i:integer;
Begin
AssignFile(F,'c:\text.txt');
Rewrite(F);
For i:=0 to Memo1.Lines.Count do
WriteLn(F,Memo1.Lines[i]);
CloseFile(F);
End;
procedure TForm1.Button1Click(Sender: TObject);
Begin
If savedialog1.execute then SaveMyFile(Savedialog1.filename);
End;
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 3 août 2006 à 12:34
@Francky: D'après ce que j'ai compris, il veut limiter la longeur des lignes à une longeur fixe (82). De plus, chez moi, SaveToFile enregistre les retour chariot ?!?. Donc je ne voit pas l'utilité de ton code.
PS: Memo1.Lines.Count -1 stp. ;)
@Stef: je ne connait pas d'autre moyen (bien qu'il en exist surement) pour tronquer(séparer) des lignes à une taille donnée.
Mais, si tu le remplit à la main (saise ou copier coller) le plus simple est d'ajouter toi même les retour à la ligne avec la touche ENTER. Après c'est à toi de voir. Perso, j'aime pas faire à la main ce qu'un code peut faire pour moi.
Au fait, si tu ne veut pas modifier le contenu de ton memo, crée un TstringsList vide et Assign le avec le memo.lines. OU adapter le code que je t'ai donné pour écrire directement dans le fichier text.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 3 août 2006 à 15:53
Salut,
La propriété booléenne WordWrap ne fait passer à la ligne que d'un manière apparente dans le Memo, donc sans marquer les fins de lignes visibles d'un quelconque caractère fin de ligne/retour chariot.
L'enregistrement dans un fichier avec la méthode SaveToFile ne tiendra donc pas compte de ces "simili" retours chariot. Même si Memo.Lines.Count nous retourne bien malgré tout le nombre de chaînes apparentes, ce que je ne sais pas expliquer logiquement.
Donc, à mon avis, selon ce que veut faire exactement Stef, les méthodes de Loda et de Francky sont toutes les deux valables et complémentaires car répondant à des problématiques différentes.
hackerloc
Messages postés24Date d'inscriptionjeudi 6 mars 2008StatutMembreDernière intervention 9 janvier 2009 2 oct. 2008 à 14:23
Salut !
procedure TForm1.Button2Click(Sender: TObject);
var Fichier: TextFile; //déclarer d'abord fichier comme textefile
begin
AssignFile(fichier,edit1.Text); //créer le dossier saisie dans Edit1 ou CreateDir('c:\delphikam');
end;