Tmemo et le fichier .txt [Résolu]

Stef38200 5 Messages postés jeudi 11 mai 2006Date d'inscription 3 août 2006 Dernière intervention - 2 août 2006 à 11:22 - Dernière réponse : hackerloc 24 Messages postés jeudi 6 mars 2008Date d'inscription 9 janvier 2009 Dernière intervention
- 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
Utilisateur anonyme - 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é 83 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Matt 261 1201 Messages postés mercredi 2 novembre 2005Date d'inscription 10 septembre 2011 Dernière intervention - 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
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 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
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 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
Stef38200 5 Messages postés jeudi 11 mai 2006Date d'inscription 3 août 2006 Dernière intervention - 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
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 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
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 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
Stef38200 5 Messages postés jeudi 11 mai 2006Date d'inscription 3 août 2006 Dernière intervention - 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
Utilisateur anonyme - 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
Stef38200 5 Messages postés jeudi 11 mai 2006Date d'inscription 3 août 2006 Dernière intervention - 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
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 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
Stef38200 5 Messages postés jeudi 11 mai 2006Date d'inscription 3 août 2006 Dernière intervention - 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
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 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
Utilisateur anonyme - 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
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 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
hackerloc 24 Messages postés jeudi 6 mars 2008Date d'inscription 9 janvier 2009 Dernière intervention - 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.