Aide - Recherche - Membres - Calendrier
Version complète : codes de caractères Palm <> Windows
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Palmidem
Bonjour,
Avec HB++: Je récupère des Strings que je range (concaténation) dans un fichier sur carte. Parmi elles, les descriptions de RdV de l'Agenda.
Problème :
- à la fin de chaque "tour" (While - Wend), je vais à la fin du fichier et j'y écrit la concaténation de l'enregistrement : est-ce nécessaire de positionner un "n" à la fin de cette ligne, ou un saut de ligne se positionne-t-il tout seul ? (un chr(13) ou chr(10) n'arrange pas les affaires ..., mais je m'y attendais)
- dans la "description" du RdV, il peut y avoir des sauts de ligne (apparence dans l'agenda) que je dois enlever car ils se répercutent dans le fichier créé : je pense analyser ces textes mais quel est le code ASC ou ? que je dois rechercher afin de l'éliminer ?
merci des tuyaux ...
snark
Dans les notes de l'agenda, le caractère de fin de ligne est 10 (hexa:0A).
Palmidem
CITATION(snark)
Dans les notes de l'agenda, le caractère de fin de ligne est 10 (hexa:0A).

merci Snark : il s'agit du texte de description, et pas de la Note jointe. Est-ce bien ce que tu voulais dire ou est-ce la même chose ?
Sinon, ma boîte d'envoi en MP est pleine : j'y remédie rapidement
jpa
Salut,

Windows attend un chr(13) & chr(10) pour un retour a la ligne alors que sous PalmOS, il faut seulement un chr(10). Donc tout depend de ce que tu comptes faire de ton fichier: Si tu compte le lire depuis un PC, tes fins de ligne devront etre chr(13) & chr(10). Si tu compte le charger dans un field de ton application Palm, tu devra utiliser seulement chr(10) (ou n).

Donc si tu exportes ton texte palm pour lire sur PC, il te suffira de faire une petite routine pour remplacer les codes 10 par 13 et 10...et inversement.

Tu trouveras dans le lien ci dessous quelques exemples de fonctions 'Replace':
http://www.handheld-basic.com/forum/viewto...opic.php?t=1169

JPA


The HB++ team
Patrice
CITATION(jpa)
Windows attend un chr(13) & chr(10) pour un retour a la ligne

A l'exception (notable) de Notepad, cela n'est plus vrai pour l'immense majorité des softs Windows, le caractère LF (0x10) suffit pour un retour à la ligne.
olivier101
L'influence d'Unix... sleep.gif
Corto
CITATION(olivier101)
L'influence d'Unix... sleep.gif

Abération de DOS

Qu'est-ce qu'il a pu me faire c...r de CRLF de m....e







J'ai pas dis Windows, hein hein, vous avez vu je ne crache pas sur CrocSoft icon_lol2.gif
Patrice
CITATION(Corto)
Abération de DOS
Qu'est-ce qu'il a pu me faire c...r de CRLF de m....e

Opinion très discutable car le CRLF a une logique absolument imparable : en ASCII (d'origine), CR signale un retour en première colonne et LF un saut d'une ligne. Donc pour passer en début de ligne suivante, il faut bien les 2. CQFD... anim_wink.gif
Schtunks
CITATION(Corto)
Abération de DOS


Ca vient surtout des machine à écrire mécanique, non... rolleyes.gif
Patrice
Pas uniquement : il y a eu aussi les premières imprimantes (en mode ligne), qui ont duré un certain temps...
olivier101
CITATION(Patrice)
CITATION(Corto)
Abération de DOS
Qu'est-ce qu'il a pu me faire c...r de CRLF de m....e

Opinion très discutable car le CRLF a une logique absolument imparable : en ASCII (d'origine), CR signale un retour en première colonne et LF un saut d'une ligne. Donc pour passer en début de ligne suivante, il faut bien les 2. CQFD... anim_wink.gif

imparable pour piloter une imprimante des années 60, mais pour marquer la fin de ligne dans un fichier, hautement parable sleep.gif
Palmidem
CITATION(olivier101)
L'influence d'Unix... sleep.gif

icon_lol2.gif icon_cry2.gif bon : mes descriptions d'agenda peuvent comporter des sauts de ligne (quand j'écris dans l'agenda, quoi ... )
Quand je souhaite faire un "enregistrement en base" des composants d'une entrée d'agenda, cette "description" est logée dans un champ String memo.
Quand je souhaite exporter de la base les enregistrements sous forme de "ligne de texte" avec séparateur de champ (= ";" ) pour que ça ressemble à du .csv , mes sauts de ligne de "description" provoquent un saut de ligne dans ce fichier texte, et abusent .. en l'occurence Excel qui, en lisant ce .csv, considère que toute nouvelle ligne est un nouvel enregistrement.
J'ai donc considéré
1- que les LF ou chr(10) étaient coupables et les ai éliminés du texte de description,
2- que "table.update" insérait un CR (chr(13) à la fin des data insérées
Mais bon, ma façon de faire est un peu empirique, faute d'avoir lu l'intégralité de la doc et des forums icon_bla.gif anim_wink.gif
J'ai mis un peu de côté ce point la, car gros debug par ailleurs ... à suivre et merci
jpa
Hello,

CITATION
2- que "table.update" insérait un CR (chr(13) à la fin des data insérées


Ah ben non. Si tu parles de la methode Update de la classe Recordset, elle ne rajoute rien a tes donnees. Elle valide les modifs effectuees sur l'enregistrement courant, si celui ci est nouveau (suite a matable.AddNew) ou en mode modification (suite a matable.Edit), mais ne rajoute pas en douce quelque chose a tes donnees.

A+

JPA
The HB++ team
Palmidem
CITATION(jpa)
Hello,
CITATION
2- que "table.update" insérait un CR (chr(13) à la fin des data insérées

Ah ben non. Si tu parles de la methode Update de la classe Recordset, elle ne rajoute rien a tes donnees. Elle valide les modifs effectuees sur l'enregistrement courant, si celui ci est nouveau (suite a matable.AddNew) ou en mode modification (suite a matable.Edit), mais ne rajoute pas en douce quelque chose a tes donnees.
JPA
The HB++ team

Non, je me suis mal exprimé, et surtout pas en mal envers le langage anim_wink.gif : en fait, il s'agit de l'écriture dans un fichier. Je lis l'ensemble d'un enregistrement de la table, dont je concatene en une ligne tous les éléments, séparés par un point virgule, puis j'écris cette concaténation dans le fichier, puis je passe à la suivante etc ...
Ce "write" se termine-t-il par un CR ? Par ailleurs, il s'arrête tout seul quand le fichier frise les 64k ... une bonne adresse pour avoir la soluce rolleyes.gif :P ? Merci
jpa
Ah ok!

CITATION
Ce "write" se termine-t-il par un CR ?


Non, a moins que tu ne l'ecrives specifiquement. Exemple d'ecriture de quelques lignes dans un fichier /foo.csv sur le VFS:

CODE
Private Sub Button1_Click()

 Dim vfs as new VFSVolume

 Dim file as new StreamFile

 Dim szLine as String

 Dim i as Integer

 

 'On cherche le premier volume / carte

 if vfs.FindFirstVolume() then

   'On cree systematiquement le fichier foo.csv sous la racine

   file.Open vfs.Reference,"/foo.csv",hbModeCreateAlways+hbModeReadWrite



   'On ecrit les nom de champs sur la premiere ligne

   szLine="""Champ1"";""Champ2""" & chr(10)

   Write file,szLine[hbWriteNoNull]



   'On ajoute quelques lignes

   For i=0 to 1024

     szLine="""Ligne " & i & ",col 1"";""" & i & """" & chr(10)

     Write file,szLine[hbWriteNoNull]

   Next i  



   'Et hop, on ferme le fichier

   file.Close

 Else

   'Pas de carte!!!

   Msgbox "Ben elle est ou ta carte?!!",hbMsgBoxError

 End if

End Sub


Comme tu le vois, j'ecris dans le fichier ligne par ligne. Cependant, on pourrait aussi ecrire tout dans la chaine et ensuite ecrire cette chaine dans le fichier en une seule fois. Ou faire un mixte des deux, genre ecrire dans la chaine des paquets de n lignes puis 'flusher' vers le fichier. Tu pourras optimiser cela en fonction de la taille de tes lignes, de leurs nombres, etc...

Attention, si tu concatenes tous tes records dans une seule et meme chaine, tu pourrais depasser la taille max d'allocation d'une chaine (32k). Ou alors tu peux utiliser un streamMemory a la place d'une chaine.


JPA
The HB++ team
Palmidem
[quote=jpa]Ah ok!
[quote]Ce "write" se termine-t-il par un CR ?[/quote]
Non, a moins que tu ne l'ecrives specifiquement. Exemple d'ecriture de quelques lignes dans un fichier /foo.csv sur le VFS:
Code ...
(...) Tu pourras optimiser cela en fonction de la taille de tes lignes, de leurs nombres, etc...[/quote]
Merci, JPA - jusques là, ça va : j'en étais là après analyse d'un bout de code que m'avait passé Poolpy, sauf à connaître les CR et LF, usage et codes. De fait, je m'en sers pas mal en VBA ds MS Office, mais c'est une autre histoire rolleyes.gif anim_wink.gif .
[quote=jpa]Attention, si tu concatenes tous tes records dans une seule et meme chaine, tu pourrais depasser la taille max d'allocation d'une chaine (32k). Ou alors tu peux utiliser un streamMemory a la place d'une chaine.[/quote]
Eh oui, j'y ai aussi goûté à la barre des 32k pour la String, comme aux 64k pour la File ... d'où effectivement une boucle ligne à ligne (avec un chr(10) en fin) . Mais je suis jeté avant la fin de ma table par cette limite de file. En tout cas, merci JPA et les autres Amis

JPA The HB++ team[/quote]
jpa
Hello,

CITATION
Mais je suis jeté avant la fin de ma table par cette limite de file.


Heu...quelle limite? Ton probleme doit etre ailleurs car il n'y pas de limite pour le fichier, hormis la place dispo sur ta carte....Peux tu faire voir ton code?

JPA
The HB++ team
Palmidem
CITATION(jpa)
Hello,
CITATION
Mais je suis jeté avant la fin de ma table par cette limite de file.

Heu...quelle limite? Ton probleme doit etre ailleurs car il n'y pas de limite pour le fichier, hormis la place dispo sur ta carte....Peux tu faire voir ton code? JPA The HB++ team

Hello, voilà quelques procédures de constitution de mon fichier sur carte. C'est pas mon job, mais mon premier essai en HB++ alors merci de l'indulgence ... et des tuyaux
snark
Pour mettre la date dans FilNam, tu peux utiliser Format:
CODE
FilNam = "/" & Format(Now,"yymmdd") & " - Done.csv"
Palmidem
CITATION(snark)
Pour mettre la date dans FilNam, tu peux utiliser Format:
CODE
FilNam = "/" & Format(Now,"yymmdd") & " - Done.csv"

merci Snark c'est effectivement beaucoup mieux : je l'insère de suite.
Palmidem
CITATION(jpa)
Ah ok!
Exemple d'ecriture de quelques lignes dans un fichier /foo.csv sur le VFS:
CODE
Private Sub Button1_Click()  (...)  End Sub

JPA The HB++ team

Merci JPA et merci Poolpy : exemple extrèmement utile.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.