Det enklaste är nog om du kan ge exempel på hur filen ser ut före och efter du har sparat om den i notepad (bifoga exempelvis).
(Jag menar, då ser man ju på en gång vad det är för format i stället för att behöva gissa.)
10 svar · 757 visningar · startad av JAreMANNEN
Hej,
Behöver spara ner en textfil i ett speciellt format.
Som det är idag så skapas en ren textfil som importeras i ett program, för att alla tecken (åäö m.m.) ska bli riktigt så måste jag manuellt öppna textfilen i notepad och spara om den.
Formatet som jag sparar om i är "MS-DOS"-format, nu vet inte jag vad det egentligen heter men kan det vara OEM?
I vilket fall som helst så skulle jag mer än gärna slippa detta extra manuella steg varje gång.
Frågan är altså om det går att ange vid skapandet att filen ska sparas som "MS-DOS"-format?
Tack på förhand!
Det enklaste är nog om du kan ge exempel på hur filen ser ut före och efter du har sparat om den i notepad (bifoga exempelvis).
(Jag menar, då ser man ju på en gång vad det är för format i stället för att behöva gissa.)
Före:
D 361 001 361
D 361 004 Melina Bjerkesjö
Efter:
D 361 001 361
D 361 004 Melina Bjerkesj”
Exempel på vissa tecken:
å = †
ä = "
é = ,
Jag var lite otydlig där. Jag menade att jag behövde exempel på filerna i sig (bifogade, inte inklistrade) för att säkert kunna kolla vad det rörde sig om.
Men som det ser ut nu är "före" skapad i dos-miljö (kommandotolken) och "efter" är som den blir när den öppnas i Windows.
Vad är det för sorts program som skapar filen och vad är det för något som ska läsa den?
Windows använder ANSI, DOS använder Extended (8-bitars) ASCII.
Ifall du använder FileSystemObject.CreateTextFile så ska den enligt dokumentationen skapa en ASCII-fil ifall du inte specifikt anger att den ska skapa en unicode-fil.
Här kommer de olika filerna:
Filerna importeras i ett administrationssystem för kund/orderhantering.
Eftersom filerna innehåller känslig data så kan jag tyvärr inte ge annan info än min egen. Det är altså ett kundregister som uppdateras.
Guffa:
Jag skapar filen mha FSO och har inte angett någonstans att den ska göra Unicode. Filen ser riktig ut om jag öppnar i windows, men om jag skulle importera orginalfilen utan att spara om den så blir det Extended (8-bitars) ASCII i kundregistret.
Originalfilen är unicode (16-bit). Omsparad fil är 8-bitars ascii.
Den där importeringen, är det ett skript eller är det ett program som du inte skrivit?
Det verkar som att den kräver 8-bitars ascii. Så du borde titta på dokumentationen till FSO och se hur man gör för att skapa en sådan fil. Annars är det trivialt att konvertera, bara att strippa vartannat tecken och flytta på åäöÅÄÖéÉ.
Importen sker till ett fristående program som inte jag utvecklat själv (Garp).
Enligt supporten där så måste filen vara av 8-bitars ascii.
Jag får väl helt enkelt söka ännu mer och hoppas att jag hittar någon lösning.
Kolla ifall du verkligen inte har angett att filen ska vara unicode. Ifall du till exempel sätter True som tredje parameter i CreateTextFile, så blir filen unicode.
Från MSDN:
"object.CreateTextFile(filename[, overwrite[, unicode]])"
"unicode
Optional. Boolean value that indicates whether the file is created as a Unicode or ASCII file. The value is true if the file is created as a Unicode file, false if it's created as an ASCII file. If omitted, an ASCII file is assumed."
Tar upp denna tråden igen!
Det verkar inte bli någon som hellst skillnad mellan:
Set TextFile = FSO.CreateTextFile("C:\test.txt", False, True) 'UNICODE
Set TextFile = FSO.CreateTextFile("C:\test.txt", False, False) 'ASCII
Ska man se skillnad i filen på UNICODE och ASCII?
Känns som att jag snurrat in mig i detta nu så jag vet varken ut eller in :(
Har sökt i flera dagar på nätet engående detta och det enda jag kan hitta är en funktion(?) som finns inbyggd i windows API som heter CharToOem.
Problemet är att jag inte har lyckats använda den i VB som jag använder numera!!
Har hittat följande kod:
Private Declare Function Char2Oem Lib "user32" Alias "CharToOemA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Private Declare Function Oem2Char Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As String, ByVal lpszDst As String) As Long
Public Function Char2Oem(aSrc As Variant) As String
On Error GoTo fel
Dim src As String, dst As String
If IsNull(aSrc) Then GoTo fel
src = aSrc: dst = aSrc: CharToOem src, dst: Char2Oem = dst: Exit Function
fel: Char2Oem = ""
End Function
Public Function Oem2Char(aSrc As Variant) As String
On Error GoTo fel
Dim src As String, dst As String
If IsNull(aSrc) Then GoTo fel
src = aSrc: dst = aSrc: OemToChar src, dst: Oem2Char = dst: Exit Function
fel: Oem2Char = ""
End Function
Källa till koden finns här: http://www.pellesoft.se/communicate/forum/view.aspx?msgid=158989&forumid=2&sum=0
Sitter med en VBS-fil just nu i windowsmiljö och koden ovan fungerar inte alls.
Finns heller inget som säger att funktionen ovan löser mitt problem, då den bara gör om innehållet man skickar in och inte hela filen!?
Har skapat en egen funktion som ersätter alla ANSI-tecken till ASCII, men det hjälper inte då programmet (samma som tidigare) tydligen känner av att filtypen inte är av rätt format, altså OEM.
Är verkligen i behov av att fixa detta nu när vi håller på att automatisera våra system.
Ge mig exempel på vad som helst som gör att jag kan SKAPA/KONVERTERA filer till OEM-format, om jag så ska lära mig ett nytt språk..så trött på detta nue x(
Moderator kan flytta tråd om det är aktuellt.