13. juni 2008 - 08:17Der er
15 kommentarer og 2 løsninger
Gemme fil i specielt format (UTF-8)
Jeg har noget VBA-kode i Access 2003 der laver en text-fil vha "print #" Den resulterende text-fil kan dog ikke læses af det program, der skal læse det. Hvis jeg åbner filen i notepad og gemmer som UTF-8 så vil programmet godt læse filen. Er der en mulighed for at få Access til at gemme i UTF-8 direkte så jeg ikke skal lave konverteringen med notepad ?
Kort fortalt: Det er en tekststreng jeg har i VBA der skal skrives til en fil, og filen skal være i UTF-8
Når jeg danner XML filer i min program til at lave ribbons til Access 2007 bruger jeg nedenstående. Hvis ikke jeg gør det på den måde, så kan den dannede XML ikke åbnes i Explorer. Måske kan det også løse dit problem.
Public Const TristateTrue As Integer = -1
Dim strOutput_File As String Dim fsObj Dim fsFile
Set fsObj = CreateObject("Scripting.FileSystemObject") Set fsFile = fsObj.OpenTextFile(strOutput_File, ForAppending, False, TristateTrue)
Jeg har afprøvet nogel forskellige funktioner og det virker ikke. Jeg får en masse mærkelig data ud, og det er måske også det som funktionerne skal komme med, men ikke det jeg kan bruge. Det output jeg skal bruge svarer til det output der kommer når man i Notepad vælger "gem som" og så vælger UTF-8 som kodning.
Da jeg begyndte at bruge ovennævnte metode til a danne XML filer med kunne de pludselig vises i Internet Explorer. Jeg ved ikke om det er UTF8, men et eller andet må det gøre:-)
Jeg kan ikke gennemskue hvordan jeg skal bruge din metode... lige nu har jeg en tekststreng som jeg lægger i en fil med "print #1, tekststreng". Hvrdan skal jeg gøre med din metode ?
De to links jeg gav dig returnerer begge to en bytearray. Denne skal først konverteres til en streng. Dette kan f.eks. gøres i en rutine som denne:
Public Function ByteArr2String(Arr() As Byte) As String Dim x As Long Dim strUTF8 As String For x = LBound(Arr) To UBound(Arr) strUTF8 = strUTF8 & Chr(Arr(x)) Next ByteArr2String = strUTF8 End Function
Din Print# sætning skal herefter se ud som følger (eksempel):
Public Function fhpXML_Write(strFile_Name As String, strContent As String) As Integer ' ----------------------------------------------------------------------------------- ' Purpose : Write content in XML file ' Parameters : ' Returns : Integer ' Created : 04-07-2008 ' Modified : ' Remarks : ' ----------------------------------------------------------------------------------- 'On Error GoTo Error_fhpXML_Write Dim fsObj Dim fsFile
Set fsObj = CreateObject("Scripting.FileSystemObject")
'First create file or open existing file If fhpFile_Exists(strFile_Name) = False Then Set fsFile = fsObj.CreateTextFile(strFile_Name, True, True) Else Set fsFile = fsObj.OpenTextFile(strFile_Name, ForAppending, False, TristateTrue) End If 'Then write content fsFile.Write strContent
fsFile.Close
Exit_fhpXML_Write: Exit Function
Error_fhpXML_Write: Select Case Err.Number Case 3021 Case 2501 Case Is < 0 Case Else MsgBox Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error in procedure 'fhpXML_Write'" End Select Resume Exit_fhpXML_Write
End Function
Kald funktionen med f.eks. fhpXML_Write("c:\test.xml", "Dette er en test")
--> hugopedersen: Så vidt jeg ved (og jeg kan sagtens være forkert på den), så vil din kode producere UTF-16 koderet tekst (Unicode). Det kan de fleste XML-parsere sagtens klare, men spørgeren efterlyser specifikt UTF-8 koderet tekst.
Det skal jeg ikke kunne sige om det er det ene eller andet UTF format, men som jeg startede med at sige 'Måske kan det også løse dit problem' = ingen garanti :-)
Begge virker fint. Så jeg vil gerne give jer begge point, dog synes jeg 15 er for lidt. Så den første får point og så opretter jeg et spm mere til den anden med 30 point.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.