Changer le type de separateur [Résolu]

Signaler
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006
-
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006
-
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

Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

@ 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
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010

StringGrid1.Rows[1].Delimiter
StringGrid1.Rows[1].DelimitedText

peut etre ...

Tout est en tout et réciproquement ...
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

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.
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

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
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

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.
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008

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 ?
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

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.
Messages postés
178
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
2 février 2010

Bon .. va falloir réviser ma façon de répondre aux questions ...

------------------------------
Tout est en tout et réciproquement ...
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

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...
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

Bon .. va falloir réviser ma façon de répondre aux questions ...

J'aurais du aussi preciser que je debute ...
Messages postés
11
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
23 avril 2006

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.