Changer le type de separateur [Résolu]

Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
- - Dernière réponse : cs_99999
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
- 23 avril 2006 à 18:24
bonjour ,

j'utilise une fonction pour sauvegarder un stringgrid dans un fichier mais en fait cette fonction me met un separateur "," entre chaque champs et moi je voudrait le remplacer par une tabulation.
quel parametre puis-je mettre a la place de "commatext" pour obtenir une tabulation plutot qu'une virgule ?

je vous met la fonction ci-dessous , si quelqu'un a une idee je suis prenneur .
merci d'avance.

{------------------------------------------------------------------------------}
{ Fonction de sauvegarde du fichier }
{------------------------------------------------------------------------------}
function SaveToCSV:Boolean;
const
SeparTab = Chr(9);

var
SD : TSaveDialog;
I : Integer;
CSV : TStrings;
FileName : String;
begin
Try

If Form1.SaveDialog1.Execute = True Then
Begin

FileName := Form1.SaveDialog1.FileName;
If Copy(FileName,Pos('.',FileName),Length(FileName)-Pos('.',FileName)+1) <> '.ini' Then FileName := FileName + '.csv';
Screen.Cursor := crHourGlass;
CSV := TStringList.Create;
Try
For I := 0 To Form1.StringGrid1.RowCount - 1 Do CSV.Add(Form1.StringGrid1.Rows[I].Commatext);
CSV.SaveToFile(FileName);
Result := True;
Finally
CSV.Free;
End;
End;

Finally
Form1.SaveDialog1.Free;
Screen.Cursor := crDefault;
End;
end;
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
3
Merci
En gros, cela donne :
CSV := TStringList.Create;
Try

For I : = 0 To Form1.StringGrid1.RowCount - 1 Do
Begin
Form1.StringGrid1.Rows[I].Delimiter := #9;
CSV.Add(Form1.StringGrid1.Rows[I].DelimitedText
);
End;

CSV.SaveToFile(FileName);
Result := True;

Finally
CSV.Free;
End;
End;
<hr size ="2" width="100%">Et là ça marche.
NB: si tu as déjà une tabulation dans la ligne (par ex, si CSV[3] := 'Hello' + #9 + 'World'), la propriété DelimitedText t'entourerra cette chaîne par des guillemets ou tout autre caractère défini dans QuoteChar.

@ ++

Si tu ne te plantes pas ......
tu ne pousseras jamais

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
3
Merci
@ jfs59: C'est sur qu'avec une petie phrase, il aurait bien mieux compris...

@ 99999: Si tu veux séparer uniquement par une tabulation, c'est à toi d'écrire une fonction de sortie.
Tiens, je suis généreux aujourd'hui (a cause des vacances ?!)
function ExtractWithTabs(S: TStrings): string;
const
SPACE: array[Boolean] of string[1] = (#9, '');
var
I: Integer;
begin
Result := EmptyStr;
for I : = 0 to S.Count - 1 do Result :Result + S[I] + SPACE[I S.Count - 1];
end ;
<hr size ="2" width="100%">Et voila !!
Tu remplaces donc
Form1.StringGrid1.Rows[I].Delimiter := #9;
CSV.Add(Form1.StringGrid1.Rows[I].DelimitedText
);
par :
CSV.Add(ExtractWithTabs(Form1.StringGrid1.Rows[I]));

NB: Un détail: nomme tes composants, ça t'aidera pour plus tard je t'assure.

Si tu ne te plantes pas ......
tu ne pousseras jamais

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de florenth
Messages postés
184
Date d'inscription
mardi 29 avril 2003
Dernière intervention
2 février 2010
0
Merci
StringGrid1.Rows[1].Delimiter
StringGrid1.Rows[1].DelimitedText

peut etre ...

Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
StringGrid1.Rows[1].Delimiter
StringGrid1.Rows[1].DelimitedText
peut etre ...

non j'avais essayer ça et ça ne marche pas.

Delimiter me donne un fichier qu'avec une virgule sur chaque ligne
et
delimitedText n'a l'air d'avoir aucun effet.
Commenter la réponse de cs_99999
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
0
Merci
Alala,
Tu définis Delimiter à #9 (tabulation) et tu lis DelimitedText et là, tu as ce eue tu veux.

++

Si tu ne te plantes pas ......
tu ne pousseras jamais
Commenter la réponse de florenth
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
merci florenth ça marche .

Par contre il va falloir que je trouve comment declarer le QuoteChar comme tu m'explique dans ton NB car je ne veux pas des guillements qui entoure les tabulations.

merci.
Commenter la réponse de cs_99999
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
0
Merci
Tu peux mettre autre chose que des guillemets entre tes chaînes en spécifiant QuoteChar mais tu ne peux pas mettre #0 (c-à-d rien).
Si tu veux uniquement séparer tes chaînes par une tabulation, il faut que tu définisse toi même ta méthode.
Mais puisque c'est pour y enregistrer dans un fichier, c'est pas bien important, non ?
Commenter la réponse de florenth
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
c'est genant si je ne peux pas mettre la valeur rien...car en faite c'est important ;
ce fichier est relu apres dans un autre logiciel et il faut que les champs soit separer que par des tabulations .
certaines valeurs de champs sur les lignes sont entre guillemets et doivent le rester mais le faite que des guillemets soit rajouter sur mes champs vides me pose probleme.
Commenter la réponse de cs_99999
Messages postés
184
Date d'inscription
mardi 29 avril 2003
Dernière intervention
2 février 2010
0
Merci
Bon .. va falloir réviser ma façon de répondre aux questions ...

------------------------------
Tout est en tout et réciproquement ...
Commenter la réponse de cs_jfs59
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
j'oubliais ,

pour ouvrir mon fichier j'utilisele code source de cette page et il gere a l'ouverture les tabulations ou autre separateur mais mon niveau de programmation ne m'a pas permit d'exploiter correctement ce qui existe deja , c'est pourquoi j'utilise une autre fonction pour sauvegarder qui a mon avis n'est pas adapter a ce que je veux...
Commenter la réponse de cs_99999
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
Bon .. va falloir réviser ma façon de répondre aux questions ...

J'aurais du aussi preciser que je debute ...
Commenter la réponse de cs_99999
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Dernière intervention
23 avril 2006
0
Merci
merci encore une fois florenth , c'est nickel maintenant , je n'y serais pas arriver sans toi .
je vous remercie grandement de votre aide.
bonne fin de week end a vous.
Commenter la réponse de cs_99999

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.