Το παρακάτω κομμάτι κώδικα, διορθώνει αυτό το πρόβλημα.
Μετατροπή 'χαλασμένου' backup αρχείου
(δεν ξέρω αν ισχύει για όλα, αλλά στην συγκεκριμένη περίπτωση με latin1 λειτουργεί. Με μικρές παραλλαγές, θα λειτουργεί και σε άλλα αρχεία)
Οδηγίες: Alt-F11 σε οποιαδήποτε εφαρμογή του Office, Paste τις functions, Ctrl-G για να εμφανιστεί το Immediate window και γράφουμε:
Κώδικας: Επιλογή όλων
Call ConvertDB("C:\prin.sql", "C:\meta.sql")
Κώδικας: Επιλογή όλων
Option Explicit
Public Sub ConvertDB(ByVal inFile As String, ByVal outFile As String)
Dim arData() As Byte
Dim i As Long
Dim fn As Long
Dim szChar As String
Call LoadFileToArray(inFile, arData())
If UBound(arData) = 0 Then
MsgBox "File is empty (?)", vbExclamation
Exit Sub
End If
fn = FreeFile
Open outFile For Output As #fn
For i = 0 To UBound(arData)
If i Mod 10000 = 0 Then
Debug.Print Int(i / UBound(arData) * 100) & "%"
DoEvents
End If
If arData(i) = 195 Then
szChar = Chr(arData(i + 1) + 64)
i = i + 1
ElseIf arData(i) = 194 Then
If arData(i + 1) = 182 Then
szChar = Chr(162) 'Ά
Else
szChar = Chr(arData(i + 1))
End If
i = i + 1
Else
szChar = Chr(arData(i))
End If
Print #fn, szChar;
Next i
Close #fn
Debug.Print "100%"
End Sub
Public Sub LoadFileToArray(ByVal szFile As String, ByRef outArray() As Byte)
Dim fn As Long
Erase outArray(): ReDim outArray(0) As Byte
If Not FileExists(szFile) Then Exit Sub
fn = FreeFile
Open szFile For Binary As #fn
ReDim outArray(LOF(fn) - 1) As Byte
Get #fn, 1, outArray()
Close #fn
End Sub
Public Function FileExists(ByVal szFile As String) As Boolean
On Error Resume Next
Dim lSize As Long
Err.Clear
lSize = FileLen(szFile)
FileExists = (Err.Number = 0)
Err.Clear
End Function