13. september 2000 - 02:32Der er
11 kommentarer og 1 løsning
Output / Input
Jeg har 1-2 problemmer det 1 når jeg skal save (gemme)en file laver den en [ENTER] til sidst i filen, alser hvis jeg skriver en tekst i den første linje for jeg 2 linjer når jeg bruger: \'--------------------------------- sFilnavn = \"C:\\test.txt\" Open sFilnavn For Output As #1 Print #1, Tekstfelt.Text Close #1 \'---------------------------------
Problem 2: Når jeg skal Loade (åbne)en file der har \"|\" tegn i start og i slut og \"kbБކb‘p¯²uOL‡|žjŒƒ‹‡b\" tegn imelem så kan jeg ikke åbne den med: \'--------------------------------- sFilnavn = \"C:\\test.txt\" Open sFilnavn For Input As #1 Tekstfelt.Text = Input(FileLen(sFilnavn), #1) Close #1 \'---------------------------------
Første problem. VB opfatter Print som en afart af WriteLn eller WriteLine, hvilket nogen gange er noget nisse. Prøv med Binary og Put.
sFilnavn = \"C:\\test.txt\" Open sFilnavn For Binary As #1 Put #1,,Tekstfelt.Text Close #1
Andet problem. Tjaaa... jeg har aldrig været ude for at vb gør så\'n med sådan nogle kbБކb‘p¯²uOL‡|žjŒƒ‹‡b filer, men du kan komme uden om det, enten ved at læse filen gennem Scripting.FileSystemObject eller ved at åbne filen med Binary og læse den med Get.
Så vidt jeg husker kan man indlæse hele filen i et array og så samle det igen bagefter - jeg ved dog ikke om man kan i VB 5.0.
Function LoadBinFile(sFilnavn As String) As String Dim aBytes() As Byte Dim iFileNr As Integer iFileNr = Freefile On Error Goto Err_Mystisk Open sFilnavn For Binary As #iFileNr Get #iFileNr,,aBytes Close #iFileNr On Error Goto Err_Crap LoadBinFile = Join(aBytes) Exit Function Err_Mystisk: MsgBox \"Øv, der opstod en fejl.\" Exit Function Err_Crap: MsgBox \"Crap! Join() funktionen vil have et String Array i stedet for et Byte Array. Prøv med \"\"Dim aBytes() As String\"\" først i funktionen i stedet for \"\"Dim aBytes() As Byte\"\".\" End Function
Hvis du dimmentionerer aBytes inden Get, så læser den kun UBound(aBytes) - LBound(aBytes) + 1 bytes af filen.
Private Sub Command1_Click() Dim navn navn = \"c:\\test.txt\" Text1 = LoadBinFile(navn) End Sub
Husk, en sub returnerer ikke nødvendigvis data og kaldes med Call SubName(yadi,yaddi,ya) Function returnerer en værdi på denne måde ReturVerdi = FunctionName(yadi,yaddi,ya)
Så prøv sådan her - det er godt nok lidt langsomt hvis filerne bliver for store...
Private Sub Command1_Click() Dim strNavn As String strNavn = \"c:\\test.txt\" Text1.Text = LoadBinFile(strNavn) End Sub
Function LoadBinFile(strFilename As String) As String Dim intFileNr As Integer Dim intCharPos As Long Dim bytChar As Byte Dim strBuffer As String intFileNr = FreeFile Open strFilename For Binary As #intFileNr While intCharPos < FileLen(strFilename) intCharPos = intCharPos + 1 Get #intFileNr, intCharPos, bytChar strBuffer = strBuffer & Chr(CLng(bytChar)) Wend Close #intFileNr LoadBinFile = strBuffer End Function
Function LoadBinFile(strFilename As String) As String Dim intFileNr As Integer Dim strBuffer As String Dim lngFilelen As Long lngFilelen = FileLen(strFilename) strBuffer = String(lngFilelen, \" \") intFileNr = FreeFile Open strFilename For Binary As #intFileNr Len = lngFilelen Get #intFileNr, , strBuffer Close #intFileNr LoadBinFile = strBuffer End Function
Her er den igen... Denne version fjerner de to sidste bytes, så brug den hvis du får en [ENTER] sidst i de indlæste data (Det må være et VB < 6.0 fænomen)
Function LoadBinFile(strFilename As String) As String Dim intFileNr As Integer Dim strBuffer As String Dim lngFilelen As Long lngFilelen = FileLen(strFilename) strBuffer = String(lngFilelen, \" \") intFileNr = FreeFile Open strFilename For Binary As #intFileNr Len = lngFilelen Get #intFileNr, , strBuffer Close #intFileNr LoadBinFile = Left(strBuffer, lngFilelen - 2) End Function
winkill: Det virker fint, jeg siger mange TAK for dit arbejde. ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.