Tmemo et le fichier .txt [Résolu]

Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Dernière intervention
3 août 2006
- 2 août 2006 à 11:22 - Dernière réponse :
Messages postés
24
Date d'inscription
jeudi 6 mars 2008
Derniè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);

begin

Savedialog1.DefaultExt := 'TXT';
Savedialog1.filename := '*.txt';

if Savedialog1.Execute then Memo1.Lines.SaveToFile(Savedialog1.filename);
end;


procedure TForm1.Memo1Change(Sender: TObject);
Var
P : integer;

Begin
P:=Memo1.Perform(em_LineFromChar,$FFFF,0);
If Length(Memo1.Lines.Strings[p]) = 25 then
Memo1.Lines.add('');
End;


end.

Merci à vous de m'aider...

A toujour besoin d'aide
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
- 3 août 2006 à 06:15
3
Merci
Oh pardon,

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);

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
1201
Date d'inscription
mercredi 2 novembre 2005
Dernière intervention
10 septembre 2011
- 2 août 2006 à 11:32
0
Merci
Salut,

Dans la propriété WantTabs de ton memo, met True.

Ou alors un bout de code dans OnCreate de ta form :

Memo1.WantTabs :=True;

@+
 Matt

<hr size="2" width="100%" />La paresse est la mère du génie...
http://www.delphilab.com
Commenter la réponse de Matt 261
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 2 août 2006 à 12:33
0
Merci
Salut,

Je suppose que tu voulais dire "WantReturns", Matt ?
Mais ça ne conviendra pas pour le problème de Stef.


Il faut marquer la fin de chaque ligne par les caractères #13#10 (fin de ligne et retour chariot), ce qui donne par exemple :

Memo1.Text := 'première ligne' + #13#10 + 'deuxième ligne' + #13#10 + 'troisième ligne';

Ou sinon, tu enregistres ligne par ligne (avec une boucle) dans ton fichier texte.

Bonne prog'


 
Commenter la réponse de japee
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 2 août 2006 à 13:08
0
Merci
un détail en passant:

system.sLineBreak

beaucoup mieux que le vieux #13#10 :D
Commenter la réponse de cs_Loda
Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Dernière intervention
3 août 2006
- 2 août 2006 à 17:00
0
Merci
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.

Pouvez vous m'en dire plus svp ?


A toujour besoin d'aide
Commenter la réponse de Stef38200
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 2 août 2006 à 17:44
0
Merci
comment remplis-tu ton memo? avec du code? au clavier?

Sinon, sauve ton fichier à la main (cad sans utiliser SaveToFile):
lit mem1.lines une par une et ajout les sLineBreak où tu les veux.
Commenter la réponse de cs_Loda
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 2 août 2006 à 18:23
0
Merci
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


bon code,
Commenter la réponse de cs_Loda
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 2 août 2006 à 18:46
0
Merci
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.

A +
Thierry
Commenter la réponse de ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 2 août 2006 à 18:51
0
Merci
Le temps que je poste mon message, Loda te donne gentillement du code de coupure de lignes.
A toi, Stef, de voir ce dont tu as besoin. 
Commenter la réponse de ThWilliam
Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Dernière intervention
3 août 2006
- 2 août 2006 à 20:12
0
Merci
Merci,
Je remplie le memo avec du text recup sur le net
donc c'est du copier coller.

Je vais essayer ton code.Et on est obliger de faire comme ça ?


A toujour besoin d'aide
Commenter la réponse de Stef38200
- 3 août 2006 à 04:19
0
Merci
Non il y a une autre solution,

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;

@+
Commenter la réponse de Utilisateur anonyme
Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Dernière intervention
3 août 2006
- 3 août 2006 à 12:32
0
Merci
Merci beaucoup ( A tous)
Je vais reprendre mon petit prog et je vous tiens au courant si ça marche pas.




A toujour besoin d'aide
Commenter la réponse de Stef38200
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 3 août 2006 à 12:34
0
Merci
@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.

bon code,
Commenter la réponse de cs_Loda
Messages postés
5
Date d'inscription
jeudi 11 mai 2006
Dernière intervention
3 août 2006
- 3 août 2006 à 12:58
0
Merci
Merci Loda.
Le code de Francky fonctionne , et je vais essayer
le tient.

MERCI BEAUCOUP


A toujour besoin d'aide
Commenter la réponse de Stef38200
Messages postés
1799
Date d'inscription
vendredi 27 décembre 2002
Dernière intervention
19 juillet 2018
- 3 août 2006 à 15:53
0
Merci
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.

Bonne prog'
Commenter la réponse de japee
- 3 août 2006 à 16:22
0
Merci
Re,

@Loda :

*tu as raison pour le -1. Désolé pour la faute merci de l'avoir souligné ;).
*Pour tronquer : ton code est ok ;).


@Japee : tu as raison pour le savetofile.

@++
Commenter la réponse de Utilisateur anonyme
Messages postés
900
Date d'inscription
vendredi 3 novembre 2000
Dernière intervention
30 juillet 2009
- 3 août 2006 à 17:25
0
Merci
@Jappe : "Memo.Lines.Count nous retourne bien malgré tout le nombre de chaînes apparentes" j'ignorais ce détail. J'ai pas perdu ma journée. :)

Et, c'est vrai, c'est pas logique...

Bon code,
Commenter la réponse de cs_Loda
Messages postés
24
Date d'inscription
jeudi 6 mars 2008
Dernière intervention
9 janvier 2009
- 2 oct. 2008 à 14:23
0
Merci
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;

end.
Commenter la réponse de hackerloc

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.