[Résolu][Basic] Vider un fichier TXT à éditer

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

[Résolu][Basic] Vider un fichier TXT à éditer

Message par Xunor »

Bonjour,
je voudrais exporter dans un fichier texte, et vider le contenu si le fichier existe déjà
J'ai fait ceci :

Code : Tout sélectionner

Sub testExportFichier(nom_f as String)
	Dim myTextFile As Object, sf As Object, fileStream As Object
	Dim myFilePath As String
	sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	fileStream = sf.openFileWrite(nom_fKML)
	myTextFile = createUnoService("com.sun.star.io.TextOutputStream")
	myTextFile.OutputStream = fileStream
	myTextFile.Encoding = "UTF-8"
  	myTextFile.writeString("texte test" & chr(10))
	fileStream.closeOutput
	myTextFile.closeOutput
end Sub
Mais là je ne fait qu'écrire dans le fichier sans le vider.

Bien sûr je pourrais le supprimer pour le recréer, mais ça ne me plait pas trop, je suis sûr que ça fait partie des trucs "simples" mais je n'ai pas réussi à trouver << Honte sur moi !
Je pense que c'est dans le mode d'ouverture que la solution se cache (sans certitude)

Code : Tout sélectionner

	sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
Merci pour votre attention ;)
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Basic] Vider un fichier TXT à éditer

Message par Dude »

Avec une commande Shell, il suffit d'envoyer une instruction système Windows telle que :

Code : Tout sélectionner

copy /y nul test.txt
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Basic] Vider un fichier TXT à éditer

Message par martinbrait »

Bonjour Xunor, Dude,


Je ne trouve pas les propriétés adéquates
pour le service "com.sun.star.ucb.SimpleFileAccess"
Variante possible, en OooBasic :
'========================================

Code : Tout sélectionner

Sub TestEcrireDansFichierTxt()
'EcrireEtRemplacer("c:\temp\test.txt")
EcrireAlaSuite("c:\temp\test.txt")
End Sub


'=========================================
'écrire et remplacer contenu fichier texte
'=========================================

Code : Tout sélectionner

Sub EcrireEtRemplacer(strSourceFilePath As String)
Dim FileNo As Integer
Dim Filename As String
dim Currentline as string

'Doc = ThisComponent
'Sheet = Doc.Sheets(0)

'Cell = Sheet.getCellRangeByName("D11")
'caseid = Cell.String


'Cell2 = Sheet.getCellRangeByName("D12")
'EmpCode = Cell2.String

'Cell3 = Sheet.getCellRangeByName("D13")
'EmpName = Cell3.String

strSourceFilePath = ConvertToUrl(strSourceFilePath) ' Garantit format windows/linux de l'url
FileNo = FreeFile               ' Establish free file handle

Open strSourceFilePath For Output As #FileNo

'Print #FileNo, currentline &  caseid  & " " & EmpCode & " " & EmpName
Print #FileNo, ("texte test remplace1" & Chr(10) & Chr(13))
Print #FileNo, ("texte test remplace2" & Chr(10) & Chr(13))
Print #FileNo, ("texte test remplace3" & Chr(10) & Chr(13))
Print #FileNo, ("texte test remplace4" & Chr(10) & Chr(13))

Close #FileNo                 

End Sub
'====================================
'écrire à la suite d'un fichier texte
'=====================================

Code : Tout sélectionner

Sub EcrireAlaSuite(strSourceFilePath As String)
Dim FileNo As Integer
Dim Filename As String
dim Currentline as string

'Doc = ThisComponent
'Sheet = Doc.Sheets(0)

'Cell = Sheet.getCellRangeByName("D11")
'caseid = Cell.String


'Cell2 = Sheet.getCellRangeByName("D12")
'EmpCode = Cell2.String

'Cell3 = Sheet.getCellRangeByName("D13")
'EmpName = Cell3.String


strSourceFilePath = ConvertToUrl(strSourceFilePath)' Garantit format windows/linux de l'url
FileNo = FreeFile               ' Establish free file handle

Open strSourceFilePath For Append As #FileNo

'Print #FileNo, currentline &  caseid  & " " & EmpCode & " " & EmpName
Print #FileNo, ("texte test à la suite1" & Chr(10) & Chr(13))
Print #FileNo, ("texte test à la suite2" & Chr(10) & Chr(13))
Print #FileNo, ("texte test à la suite3" & Chr(10) & Chr(13))
Print #FileNo, ("texte test à la suite4" & Chr(10) & Chr(13))

Close #FileNo                 

End Sub
Merci et à bientôt !
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Xunor
NOOuvel adepte
NOOuvel adepte
Messages : 16
Inscription : 02 août 2018 11:02

Re: [Basic] Vider un fichier TXT à éditer

Message par Xunor »

Merci Dude et martinbrait
Il s'agit là pour moi de solutions de contournement...
Il doit bien y avoir moyen de faire ça proprement
martinbrait a écrit : '=========================================
'écrire et remplacer contenu fichier texte
'=========================================

Code : Tout sélectionner

Sub EcrireEtRemplacer(strSourceFilePath As String)
Dim FileNo As Integer
Dim Filename As String
dim Currentline as string

strSourceFilePath = ConvertToUrl(strSourceFilePath) ' Garantit format windows/linux de l'url
FileNo = FreeFile               ' Establish free file handle

Open strSourceFilePath For Output As #FileNo
Print #FileNo, ("texte test remplace1" & Chr(10) & Chr(13))
Close #FileNo                 
End Sub
Cette technique est la technique classique d'écriture de fichier mais ne permet pas (à ma connaissance) de gérer les format d'encodage des caractères
Pour la fonction "EcrireAlaSuite()" ce n'est pas mon besoin, et je sais le gérer simplement
Un grand merci tout de même pour ton temps et tes idées
Dude a écrit :Avec une commande Shell, il suffit d'envoyer une instruction système Windows telle que :

Code : Tout sélectionner

copy /y nul test.txt
Ca ca me plait pas du tout ;) faire appel à un shell extérieur pour gérer la remise à zéro d'un fichier me semble à éviter. Merci tout de même

Vos participation Dude et martinbrait me donnent 3 nouvelles idées que je vais creuser ;)
Je repasse bientôt en donnant la réponse (j'espère)
Programmeur relativement expérimenté (on n'est jamais expert ;) )
Débutant Open Office (adieu Microsoft et ses incompatibilités)
principalement avec Apache OpenOffice 4.1.6 sous Windows 10 Famille
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Basic] Vider un fichier TXT à éditer

Message par Hubert Lambert »

Bonjour,

Regarde ici : https://www.openoffice.org/api/docs/com ... cess2.html.

Par ailleurs :
Xunor a écrit :Bien sûr je pourrais le supprimer pour le recréer, mais ça ne me plait pas trop,
C'est pourtant exactement ce que proposent les développeurs dans l'exemple suivant, extrait du module UCB de la bibliothèqe Tools de la section Macros OpenOffice :

Code : Tout sélectionner

Sub SaveDataToFile(FilePath as String, DataList())
Dim FileChannel as Integer
Dim i as Integer
Dim oFile as Object
Dim oOutputStream as Object
Dim oStreamString as Object
Dim oUcb as Object
Dim sCRLF as String

	sCRLF = CHR(13) & CHR(10)
	oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
	If oUcb.Exists(FilePath) Then
		oUcb.Kill(FilePath)
	End If
	oFile = oUcb.OpenFileReadWrite(FilePath)
	oOutputStream.SetOutputStream(oFile.GetOutputStream)
	For i = 0 To Ubound(DataList())
		oOutputStream.WriteString(DataList(i) & sCRLF)
	Next i
	oOutputStream.CloseOutput()
End Sub
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
martinbrait
InconditiOOnnel
InconditiOOnnel
Messages : 753
Inscription : 09 avr. 2013 07:15
Localisation : T'as pas dit bonjour, merci et à bientot !

Re: [Basic] Vider un fichier TXT à éditer

Message par martinbrait »

Bonjour Xunor, HubertLambert,

Pour info, simple variante, qui efface sans supprimer le fichier existant.
Penser à adapter la seconde fonction,
pour y ajouter un paramètre entrant, recevant
les données à écrire(string, tableau etc...)


Liste des encodages possibles, fournie :

Code : Tout sélectionner

'LISTE DES  ENCODAGES POSSIBLES /

' { "ISO-IR-6", RTL_TEXTENCODING_ASCII_US },
' { "ANSI_X3.4-1986", RTL_TEXTENCODING_ASCII_US },
' { "ISO_646.IRV:1991", RTL_TEXTENCODING_ASCII_US },
' { "ASCII", RTL_TEXTENCODING_ASCII_US },
' { "ISO646-US", RTL_TEXTENCODING_ASCII_US },
' { "US", RTL_TEXTENCODING_ASCII_US },
' { "IBM367", RTL_TEXTENCODING_ASCII_US },
' { "CP367", RTL_TEXTENCODING_ASCII_US },
' { "CSASCII", RTL_TEXTENCODING_ASCII_US },

' { "ISO-8859-1", RTL_TEXTENCODING_ISO_8859_1 },
' { "ISO_8859-1:1987", RTL_TEXTENCODING_ISO_8859_1 },
' { "ISO-IR-100", RTL_TEXTENCODING_ISO_8859_1 },
' { "ISO_8859-1", RTL_TEXTENCODING_ISO_8859_1 },
' { "LATIN1", RTL_TEXTENCODING_ISO_8859_1 },
' { "L1", RTL_TEXTENCODING_ISO_8859_1 },
' { "IBM819", RTL_TEXTENCODING_ISO_8859_1 },
' { "CP819", RTL_TEXTENCODING_ISO_8859_1 },
' { "CSISOLATIN1", RTL_TEXTENCODING_ISO_8859_1 },

' { "ISO-8859-2", RTL_TEXTENCODING_ISO_8859_2 },
' { "ISO_8859-2:1987", RTL_TEXTENCODING_ISO_8859_2 },
' { "ISO-IR-101", RTL_TEXTENCODING_ISO_8859_2 },
' { "ISO_8859-2", RTL_TEXTENCODING_ISO_8859_2 },
' { "LATIN2", RTL_TEXTENCODING_ISO_8859_2 },
' { "L2", RTL_TEXTENCODING_ISO_8859_2 },
' { "CSISOLATIN2", RTL_TEXTENCODING_ISO_8859_2 },

' { "ISO-8859-3", RTL_TEXTENCODING_ISO_8859_3 },
' { "ISO_8859-3:1988", RTL_TEXTENCODING_ISO_8859_3 },
' { "ISO-IR-109", RTL_TEXTENCODING_ISO_8859_3 },
' { "ISO_8859-3", RTL_TEXTENCODING_ISO_8859_3 },
' { "LATIN3", RTL_TEXTENCODING_ISO_8859_3 },
' { "L3", RTL_TEXTENCODING_ISO_8859_3 },
' { "CSISOLATIN3", RTL_TEXTENCODING_ISO_8859_3 },

' { "ISO-8859-4", RTL_TEXTENCODING_ISO_8859_4 },
' { "ISO_8859-4:1988", RTL_TEXTENCODING_ISO_8859_4 },
' { "ISO-IR-110", RTL_TEXTENCODING_ISO_8859_4 },
' { "ISO_8859-4", RTL_TEXTENCODING_ISO_8859_4 },
' { "LATIN4", RTL_TEXTENCODING_ISO_8859_4 },
' { "L4", RTL_TEXTENCODING_ISO_8859_4 },
' { "CSISOLATIN4", RTL_TEXTENCODING_ISO_8859_4 },

' { "ISO-8859-5", RTL_TEXTENCODING_ISO_8859_5 },
' { "ISO_8859-5:1988", RTL_TEXTENCODING_ISO_8859_5 },
' { "ISO-IR-144", RTL_TEXTENCODING_ISO_8859_5 },
' { "ISO_8859-5", RTL_TEXTENCODING_ISO_8859_5 },
' { "CYRILLIC", RTL_TEXTENCODING_ISO_8859_5 },
' { "CSISOLATINCYRILLIC", RTL_TEXTENCODING_ISO_8859_5 },

' { "ISO-8859-6", RTL_TEXTENCODING_ISO_8859_6 },
' { "ISO_8859-6:1987", RTL_TEXTENCODING_ISO_8859_6 },
' { "ISO-IR-127", RTL_TEXTENCODING_ISO_8859_6 },
' { "ISO_8859-6", RTL_TEXTENCODING_ISO_8859_6 },
' { "ECMA-114", RTL_TEXTENCODING_ISO_8859_6 },
' { "ASMO-708", RTL_TEXTENCODING_ISO_8859_6 },
' { "ARABIC", RTL_TEXTENCODING_ISO_8859_6 },
' { "CSISOLATINARABIC", RTL_TEXTENCODING_ISO_8859_6 },

' { "ISO-8859-7", RTL_TEXTENCODING_ISO_8859_7 },
' { "ISO_8859-7:1987", RTL_TEXTENCODING_ISO_8859_7 },
' { "ISO-IR-126", RTL_TEXTENCODING_ISO_8859_7 },
' { "ISO_8859-7", RTL_TEXTENCODING_ISO_8859_7 },
' { "ELOT_928", RTL_TEXTENCODING_ISO_8859_7 },
' { "ECMA-118", RTL_TEXTENCODING_ISO_8859_7 },
' { "GREEK", RTL_TEXTENCODING_ISO_8859_7 },
' { "GREEK8", RTL_TEXTENCODING_ISO_8859_7 },
' { "CSISOLATINGREEK", RTL_TEXTENCODING_ISO_8859_7 },

' { "ISO-8859-8", RTL_TEXTENCODING_ISO_8859_8 },
' { "ISO_8859-8:1988", RTL_TEXTENCODING_ISO_8859_8 },
' { "ISO-IR-138", RTL_TEXTENCODING_ISO_8859_8 },
' { "ISO_8859-8", RTL_TEXTENCODING_ISO_8859_8 },
' { "HEBREW", RTL_TEXTENCODING_ISO_8859_8 },
' { "CSISOLATINHEBREW", RTL_TEXTENCODING_ISO_8859_8 },

' { "ISO-8859-9", RTL_TEXTENCODING_ISO_8859_9 },
' { "ISO_8859-9:1989", RTL_TEXTENCODING_ISO_8859_9 },
' { "ISO-IR-148", RTL_TEXTENCODING_ISO_8859_9 },
' { "ISO_8859-9", RTL_TEXTENCODING_ISO_8859_9 },
' { "LATIN5", RTL_TEXTENCODING_ISO_8859_9 },
' { "L5", RTL_TEXTENCODING_ISO_8859_9 },
' { "CSISOLATIN5", RTL_TEXTENCODING_ISO_8859_9 },

' { "ISO-8859-14", RTL_TEXTENCODING_ISO_8859_14 }, // RFC 2047
' { "ISO_8859-15", RTL_TEXTENCODING_ISO_8859_15 },
' { "ISO-8859-15", RTL_TEXTENCODING_ISO_8859_15 }, // RFC 2047

' { "MACINTOSH", RTL_TEXTENCODING_APPLE_ROMAN },
' { "MAC", RTL_TEXTENCODING_APPLE_ROMAN },
' { "CSMACINTOSH", RTL_TEXTENCODING_APPLE_ROMAN },

' { "IBM437", RTL_TEXTENCODING_IBM_437 },
' { "CP437", RTL_TEXTENCODING_IBM_437 },
' { "437", RTL_TEXTENCODING_IBM_437 },
' { "CSPC8CODEPAGE437", RTL_TEXTENCODING_IBM_437 },

' { "IBM850", RTL_TEXTENCODING_IBM_850 },
' { "CP850", RTL_TEXTENCODING_IBM_850 },
' { "850", RTL_TEXTENCODING_IBM_850 },
' { "CSPC850MULTILINGUAL", RTL_TEXTENCODING_IBM_850 },

' { "IBM860", RTL_TEXTENCODING_IBM_860 },
' { "CP860", RTL_TEXTENCODING_IBM_860 },
' { "860", RTL_TEXTENCODING_IBM_860 },
' { "CSIBM860", RTL_TEXTENCODING_IBM_860 },

' { "IBM861", RTL_TEXTENCODING_IBM_861 },
' { "CP861", RTL_TEXTENCODING_IBM_861 },
' { "861", RTL_TEXTENCODING_IBM_861 },
' { "CP-IS", RTL_TEXTENCODING_IBM_861 },
' { "CSIBM861", RTL_TEXTENCODING_IBM_861 },

' { "IBM863", RTL_TEXTENCODING_IBM_863 },
' { "CP863", RTL_TEXTENCODING_IBM_863 },
' { "863", RTL_TEXTENCODING_IBM_863 },
' { "CSIBM863", RTL_TEXTENCODING_IBM_863 },

' { "IBM865", RTL_TEXTENCODING_IBM_865 },
' { "CP865", RTL_TEXTENCODING_IBM_865 },
' { "865", RTL_TEXTENCODING_IBM_865 },
' { "CSIBM865", RTL_TEXTENCODING_IBM_865 },

' { "IBM775", RTL_TEXTENCODING_IBM_775 },
' { "CP775", RTL_TEXTENCODING_IBM_775 },
' { "CSPC775BALTIC", RTL_TEXTENCODING_IBM_775 },

' { "IBM852", RTL_TEXTENCODING_IBM_852 },
' { "CP852", RTL_TEXTENCODING_IBM_852 },
' { "852", RTL_TEXTENCODING_IBM_852 },
' { "CSPCP852", RTL_TEXTENCODING_IBM_852 },

' { "IBM855", RTL_TEXTENCODING_IBM_855 },
' { "CP855", RTL_TEXTENCODING_IBM_855 },
' { "855", RTL_TEXTENCODING_IBM_855 },
' { "CSIBM855", RTL_TEXTENCODING_IBM_855 },

' { "IBM857", RTL_TEXTENCODING_IBM_857 },
' { "CP857", RTL_TEXTENCODING_IBM_857 },
' { "857", RTL_TEXTENCODING_IBM_857 },
' { "CSIBM857", RTL_TEXTENCODING_IBM_857 },

' { "IBM862", RTL_TEXTENCODING_IBM_862 },
' { "CP862", RTL_TEXTENCODING_IBM_862 },
' { "862", RTL_TEXTENCODING_IBM_862 },
' { "CSPC862LATINHEBREW", RTL_TEXTENCODING_IBM_862 },

' { "IBM864", RTL_TEXTENCODING_IBM_864 },
' { "CP864", RTL_TEXTENCODING_IBM_864 },
' { "CSIBM864", RTL_TEXTENCODING_IBM_864 },

' { "IBM866", RTL_TEXTENCODING_IBM_866 },
' { "CP866", RTL_TEXTENCODING_IBM_866 },
' { "866", RTL_TEXTENCODING_IBM_866 },
' { "CSIBM866", RTL_TEXTENCODING_IBM_866 },

' { "IBM869", RTL_TEXTENCODING_IBM_869 },
' { "CP869", RTL_TEXTENCODING_IBM_869 },
' { "869", RTL_TEXTENCODING_IBM_869 },
' { "CP-GR", RTL_TEXTENCODING_IBM_869 },
' { "CSIBM869", RTL_TEXTENCODING_IBM_869 },

' { "WINDOWS-1250", RTL_TEXTENCODING_MS_1250 },
' { "WINDOWS-1251", RTL_TEXTENCODING_MS_1251 },
' { "WINDOWS-1253", RTL_TEXTENCODING_MS_1253 },
' { "WINDOWS-1254", RTL_TEXTENCODING_MS_1254 },
' { "WINDOWS-1255", RTL_TEXTENCODING_MS_1255 },
' { "WINDOWS-1256", RTL_TEXTENCODING_MS_1256 },
' { "WINDOWS-1257", RTL_TEXTENCODING_MS_1257 },
' { "WINDOWS-1258", RTL_TEXTENCODING_MS_1258 },

' { "SHIFT_JIS", RTL_TEXTENCODING_SHIFT_JIS },
' { "MS_KANJI", RTL_TEXTENCODING_SHIFT_JIS },
' { "CSSHIFTJIS", RTL_TEXTENCODING_SHIFT_JIS },

' { "GB2312", RTL_TEXTENCODING_GB_2312 },
' { "CSGB2312", RTL_TEXTENCODING_GB_2312 },

' { "BIG5", RTL_TEXTENCODING_BIG5 },
' { "CSBIG5", RTL_TEXTENCODING_BIG5 },

' { "EUC-JP", RTL_TEXTENCODING_EUC_JP },
' { "EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE",
'   RTL_TEXTENCODING_EUC_JP },
' { "CSEUCPKDFMTJAPANESE", RTL_TEXTENCODING_EUC_JP },

' { "ISO-2022-JP", RTL_TEXTENCODING_ISO_2022_JP },
' { "CSISO2022JP", RTL_TEXTENCODING_ISO_2022_JP },
' { "ISO-2022-CN", RTL_TEXTENCODING_ISO_2022_CN },

' { "KOI8-R", RTL_TEXTENCODING_KOI8_R },
' { "CSKOI8R", RTL_TEXTENCODING_KOI8_R },

' { "UTF-7", RTL_TEXTENCODING_UTF7 },
' { "UTF-8", RTL_TEXTENCODING_UTF8 },

' { "ISO-8859-10", RTL_TEXTENCODING_ISO_8859_10 }, // RFC 2047
' { "ISO-8859-13", RTL_TEXTENCODING_ISO_8859_13 }, // RFC 2047

' { "EUC-KR", RTL_TEXTENCODING_EUC_KR },
' { "CSEUCKR", RTL_TEXTENCODING_EUC_KR },

' { "ISO-2022-KR", RTL_TEXTENCODING_ISO_2022_KR },
' { "CSISO2022KR", RTL_TEXTENCODING_ISO_2022_KR },

' { "ISO-10646-UCS-4", RTL_TEXTENCODING_UCS4 },
' { "CSUCS4", RTL_TEXTENCODING_UCS4 },

' { "ISO-10646-UCS-2", RTL_TEXTENCODING_UCS2 },
' { "CSUNICODE", RTL_TEXTENCODING_UCS2 } };




Option Explicit
Private strFilePath As String


'tout réécrire, en UTF8, ou avec l'encodage de son choix
Sub TestReEcrireUTF8()
strFilePath= "c:\temp\test3.txt"
CleanTxtFile(strFilePath)
WriteEncodedText(strFilePath)
End Sub


Sub CleanTxtFile(strFilePath As String)
Dim myTextFile As Object, sf As Object, fileStream As Object
Dim MyFilePath As String
Dim Fichier As String
Dim FileNo As Integer

MyFilePath = convertToURL(strFilePath)
' Garantit format windows/linux de l'url

'utiliser la fonction FileExists pour vérifier l'existence d'un fichier :
If FileExists(MyFilePath) = True Then 
'

FileNo = FreeFile               ' Establish free file handle

Open MyFilePath For Output As #FileNo
Print #FileNo, ""'efface tout
Close #FileNo

End If

End Sub

Sub WriteEncodedText(strFilePath As String,Optional strEncodage As String)
Dim myTextFile As Object, sf As Object, fileStream As Object
Dim myFilePath As String

myFilePath = convertToURL(strFilePath)

If FileExists(myFilePath) = True Then
print myFilePath
sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
On Error Goto fichierKO
fileStream = sf.openFileWrite(myFilePath)
myTextFile = createUnoService("com.sun.star.io.TextOutputStream")
myTextFile.OutputStream = fileStream
If IsMissing(strEncodage) Then
strEncodage= """" & "UTF-8" & """"
End If
myTextFile.Encoding = strEncodage
'myTextFile.Encoding = "UTF-8"
'myTextFile.Encoding = "IBM850" ' encodage DOS
myTextFile.writeString("À Lætitia, tous nos vœux " & chr(10))
myTextFile.writeString("Ø å Å Æ Œ " & chr(10))

fileStream.closeOutput
myTextFile.closeOutput
On Error Goto 0
End If
Exit Sub

FichierKO:
Resume FichierKO2
FichierKO2:
On Error Resume Next
MsgBox("File write error !", 16)
fileStream.closeOutput
myTextFile.closeOutput
On Error Goto 0
End Sub
@+
Dernière modification par martinbrait le 13 août 2018 10:11, modifié 2 fois.
LibreOffice version 5.4.7.2.M6 (x64)
Windows 10
+
LibreOffice version 5.4.7.2.M6 (x64)
Windows 7

#HSQL Database Engine 1.8.0
version=1.8.0

Locale : fr-FR (fr_FR)

Obligation de version


Bonjour, merci et à bientôt !
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Basic] Vider un fichier TXT à éditer

Message par Jurassic Pork »

hello,
pour vider le fichier texte à l'ouverture tu peux utiliser la méthode truncate sur son flux :
Methods' Summary
truncate : sets the size of the underlying data of the stream to zero.
exemple d'utilisation :

Code : Tout sélectionner

Sub testExportFichier()
   Dim myTextStream, sf, fileStream As Object
   Dim nom_fKML As String
   nom_fKML = ConvertToURL("M:\temp\test.kml")
   sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
   fileStream = sf.openFileWrite(nom_fKML)
   fileStream.truncate()
   myTextStream = createUnoService("com.sun.star.io.TextOutputStream")
   myTextStream.OutputStream = fileStream
   myTextStream.Encoding = "UTF-8"
   myTextStream.writeString("texte test" & chr(10))
   fileStream.closeOutput
   myTextStream.closeOutput
end Sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04