Avatar billede sjh Nybegynder
13. september 2000 - 02:32 Der 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
\'---------------------------------

er der nogle der kan løse denne opgave for mig.

Avatar billede winkill Nybegynder
13. september 2000 - 04:14 #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.
Avatar billede privaten Nybegynder
13. september 2000 - 08:40 #2
spm. 1, skriv:

Print #1,Tekstfelt.Text;

Det lille semicolon i sidste linie gør der ikke bliver puttet ENTER/LINEFEED efter data

Spm. 2: Som WK skiver skal du åbne binært og indlæse med get metoden, den tager alle data uden hensyn til special karakterer...
Avatar billede sjh Nybegynder
13. september 2000 - 22:39 #3
Hvordan bruger jeg så \"Binary Get\" metoden, for her kan man jo ikke bare skrive:

sFilnavn = \"C:\\test.txt\"
Open sFilnavn For Binary As #1
Get #1,,Tekstfelt.Text
Close #1

Avatar billede winkill Nybegynder
14. september 2000 - 23:39 #4
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.
Avatar billede sjh Nybegynder
16. september 2000 - 00:56 #5
winkill: jeg har vist ikke fattet hvordan jeg skal bruge den, hvor kommer dataen ud er det Join(aBytes).

jeg har prøvet sådan her:

Private Sub Command1_Click()
Dim navn
navn = \"c:\\test.txt\"
Call LoadBinFile(navn, text1)
End Sub

men for fejl i navn, hvordan skal jeg kalle Function.

Avatar billede winkill Nybegynder
16. september 2000 - 04:21 #6
Dette burde virke...

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)
Avatar billede sjh Nybegynder
16. september 2000 - 14:10 #7
-----------------------------
Compile error:

ByRef argument type mismatch
-----------------------------

error i \"navn\" ligger i linje:

Text1 = LoadBinFile(navn)

jeg har også prøvet med \"sFiler\" det er det samme.
Avatar billede winkill Nybegynder
17. september 2000 - 04:35 #8
Hmm... det kan den nok ikke så.

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
Avatar billede sjh Nybegynder
17. september 2000 - 22:31 #9
winkill: Ja det er langsomt. og så laver den en [ENTER] i bunden af teksten, og det må den ikke... :)
Avatar billede winkill Nybegynder
17. september 2000 - 22:40 #10
Det fatter jeg ikke, det gør den ikke her... hverken med test.txt, test.jpg, test.doc eller test.dat (med forskelligt indhold).

Jeg laver lige en opdatering som ikke er helt så langsom...
Avatar billede winkill Nybegynder
17. september 2000 - 22:46 #11
Her er en MEGET hurtigere version...

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
Avatar billede sjh Nybegynder
19. september 2000 - 19:41 #12
winkill: Det virker fint, jeg siger mange TAK for dit arbejde. ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel