cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 juillet 2002
-
26 mars 2002 à 16:09
FirSteph
Messages postés60Date d'inscriptionlundi 21 octobre 2002StatutMembreDernière intervention 7 octobre 2007
-
5 févr. 2004 à 19:22
J'ai une chaine de caractere constituée de deux mots que je veux
séparer par un retour chariot et ensuite insérer cette chaine dans un
fichier texte. Si j'utilise (#13) ca me fait bien un retour chariot
mai ssi je veu xlire le fichier avec le "NotePad" de Windows j'ai un
petit carré qui apparait au lieu du retour chariot. Si j'ouvre avec
"Word Pad", c'est ok, je sauvagarde au ficheir texte. Je relance avec
"NotePad" et zou la c'est bon!
Comment faire pour avoir un retour chariot directement compréhensible
par NotePad????
cs_lomig
Messages postés19Date d'inscriptionmercredi 20 mars 2002StatutMembreDernière intervention15 juillet 2002 26 mars 2002 à 16:31
Bon j'ai trouvé une solution pour l'histoire du retour chariot: Je ne sais pas pourquoi mais si on met "#13#10" au lieu de "#13" ca marche?????....
Par contre j'ai une autre question a laquelle perosnne ne veut (peut) repondre quel que soit le forum sur laquelle je la poste...Si ca interesse quelqu'un:
*********
Question2
*********
J'ai une BDD avec une table dont un des champs contient un Blob OLE qui pointe vers un fichier Word.
Mon but c'est de récuperer automatiquement tout le contenu textuel (que le texte) de ces fichiers Word, d'y appliquer des filtres (genre virer les noms de familles, les adresses etc...)
Bon apres maintes galères pour accéder aux données (dont un truc très chiant, le fait que un OLE définit directement sous Paradox est incompatible avec Delphi!!!), j'y arrive a peu près, mon problème principal étant désormais la lenteur. En effet je récupère le OLE et je le mets dans un OleContainer, pour pouvoir utiliser la fonction copy de word sur le texte du document. Puis je "pastefromClipboard" dans un TRichEdit et finalement je récupère le texte du document avec la propriété .text du TRichEdit. C'est de la bidouille, et si quelqu'un a une petite idée pour récupérer directement le texte du Word sans passer par TRichEdit (pour virer les code de Word), je suis preneur.
Ci dessous mon code actuel:
while not DataModulePrincipal.dtsrcPatients.DataSet.Eof do
Begin
NumDossPat:=0;
with DataModulePrincipal.dtsrcPatients.DataSet do
Begin
LeNumPat:=Fields[4].AsInteger;
End;
If LeSexe='F' then
EnTete:='<SEXE_PATIENT>FEMME</SEXE_PATIENT>'
else
EnTete:='<SEXE_PATIENT>HOMME</SEXE_PATIENT>';
//pour le patient courant on récupere tout ses dossiers dans la table DOSS
LaRequeteSQL:= 'select * .....;
DataModulePrincipal.qryRecupDossiersPatient.SQL.Text:=LaRequeteSQL;
DataModulePrincipal.qryRecupDossiersPatient.Active:=True;
unitPrincipale.frmPrincipal.dbgDossiersPatient.Update;
//début de la boucle sur les dossiers d'un patient
While not DataModulePrincipal.dtsrcListDossiersPatient.DataSet.Eof do
Begin
if DataModulePrincipal.dtsrcListDossiersPatient.DataSet.Fields[3].IsBlob() then
begin
Try
if TamponBlob.Size > 0 then
//on charge le fichier OLE du champ de la table dans le OleContainer de l'interface
unitPrincipale.frmPrincipal.olcDocument.LoadFromStream(TamponBlob);
//unitPrincipale.frmPrincipal.olcDocument.visible:=False;
unitPrincipale.frmPrincipal.olcDocument.Run;
//on remplace les noms et prénoms qui apparaissent dans le documents word
//pour celà on utilise les fonctions disponibles directement dans Word
//En les executant directement a partir du OleContainer
While unitPrincipale.frmPrincipal.olcDocument.OleObject.Range.Find.Execute(findtext:=LeNom, replacewith:=LeNumPat_Chaine)=True do
Begin
End;
while unitPrincipale.frmPrincipal.olcDocument.OleObject.Range.Find.Execute(findtext:=LePrenom, replacewith:=LeNumPat_Chaine)= True do
Begin
End;
//on selectionne et copie dans le presse papier (clipboard) le contenu du fichier word
unitPrincipale.frmPrincipal.olcDocument.OleObject.content.select;
unitPrincipale.frmPrincipal.olcDocument.OleObject.content.Copy;
//on nettoie le TRichEdit treContenuDoc
unitPrincipale.frmPrincipal.treContenuDoc.Clear;
DataModulePrincipal.dtsrcListDossiersPatient.DataSet.Next;//on passe au document suivant
End; //fin de la Boucle sur les dossiers d'un patient
//on passe au patient suivant
DataModulePrincipal.dtsrcPatients.DataSet.Next;//on passe au patient suivant
end; //Fin de la boucle sur tout les patients
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 26 mars 2002 à 21:11
En clair, tu veux juste récupérer le contenu textuel d'un document Word, si j'ai bien compris.
En utilisant les capacités d'automation de Word, il est possible (entr'autres) d'exporter le contenu d'un document word sous forme de texte puis de la charger dans un composant d'édition multiligne.
Avec OLEContainer, cà marche, mais c'est long et lourd à manipuler.
Voir "Importer une bibliothèque de types" dans delphi. Dans l'éditeur de la bibliothèque de type, tu trouveras les propriétés, méthodes et évènements exposés par le serveur intégré dans Word.
FirSteph
Messages postés60Date d'inscriptionlundi 21 octobre 2002StatutMembreDernière intervention 7 octobre 2007 5 févr. 2004 à 19:22
Bon je voudrais d'abord signaler que je ne fais pas (encore) de Delphi, mais pour ce qui est de la difference entre le #13 et #13#10 c'est du au fait que ces deux retours chariots sont differents. Il en existe plusieurs types principalement répartis entre Unicode et Windows Native (chais plus c quoi le nom).
En fait quand tu fait un retour #13, tu dois surement faire un retour chariot Unicode que Windows native ne reconnait pas (donc Notepad), par contre Word reconnait car il supporte ce format.
Par contre quand tu fais un retour #13#10 tu fais un retour WindowsNative qui est egalement compatible avec Unicode !
Voila en esperant avoir eclairci quelques points ;)