Changer le type de separateur

Résolu
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006 - 22 avril 2006 à 22:08
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre 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;

12 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
23 avril 2006 à 16:07
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
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
23 avril 2006 à 17:54
@ 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
3
cs_jfs59 Messages postés 178 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 2 février 2010
23 avril 2006 à 00:14
StringGrid1.Rows[1].Delimiter
StringGrid1.Rows[1].DelimitedText

peut etre ...

Tout est en tout et réciproquement ...
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 15:41
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
23 avril 2006 à 16:01
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
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 16:48
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.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
23 avril 2006 à 17:02
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 ?
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 17:35
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.
0
cs_jfs59 Messages postés 178 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 2 février 2010
23 avril 2006 à 17:36
Bon .. va falloir réviser ma façon de répondre aux questions ...

------------------------------
Tout est en tout et réciproquement ...
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 17:40
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...
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 17:42
Bon .. va falloir réviser ma façon de répondre aux questions ...

J'aurais du aussi preciser que je debute ...
0
cs_99999 Messages postés 11 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 18:24
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.
0
Rejoignez-nous