Avatar billede sprit Nybegynder
08. april 2004 - 00:40 Der er 16 kommentarer og
1 løsning

Fjern EOF midt i tekstfil

Tekstfilen som jeg skal bruge,
er sammensat af flere filer.
Dette format kan desværre ikke ændres.

Problemet er at tekstfilen indeholder
flere EOF, hvilket betyder filen ikke
kan eks. listes.

Kan man fjerne en EOF fra denne tekst ?
hvis ja hvordan ?

Hilsen Jan
Avatar billede martin_moth Mester
08. april 2004 - 11:48 #1
???

"Problemet er at tekstfilen indeholder
flere EOF, hvilket betyder filen ikke
kan eks. listes."

Det fatter jeg ikke - hvad mener du med at den indeholder flere EOF'er?

Hvis du smide hele filen ind i en listbox, eller?
Avatar billede sprit Nybegynder
08. april 2004 - 11:57 #2
Her er et eks. se starten af linie 3
0000    1320040327ADAN
1.000000    01:23TF 189
0000    1320040328ADKR
1.000000    19:29TKN145

jeg kan kun liste linie 1 og 2 ikke linie 3
Avatar billede martin_moth Mester
08. april 2004 - 12:27 #3
liste?
Avatar billede martin_moth Mester
08. april 2004 - 12:28 #4
Jeg kan sagtens smide hele dilens indhold ind i en textbox - men er det det du vil. Hvad mener du med "liste"?
Avatar billede sprit Nybegynder
08. april 2004 - 12:37 #5
jeg har åbne en fil med dette indhold
og med List1.AddItem MinString se indholdet i
list boxen. Det går fint til linie 3, den vises ikke.

Måske er der også en anden løsning.
De filer som bliver sat sammen indeholder hver EOF.
Hvis der nu var en svart måde at fjerne EOF på
før filerne bliver sat sammen, er problemet løst.
Avatar billede lokespas Nybegynder
08. april 2004 - 13:14 #6
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long

Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const CREATE_NEW = 1
Private Const OPEN_EXISTING = 3
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000

Private Sub Form_Load()


Dim lngRet As Long
Dim bBytes() As Byte
Dim i As Long
Dim strText As String
Dim hOrgFile As Long
Dim ret As Long
i = 1
hOrgFile = CreateFile("c:\test.txt", GENERIC_READ, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
lngRet = GetFileSize(hOrgFile, 0)

ReDim bBytes(1 To lngRet) As Byte

ReadFile hOrgFile, bBytes(1), UBound(bBytes), ret, ByVal 0&

If ret <> UBound(bBytes) Then MsgBox "Error reading file ...", vbInformation, "Bla Bla"

For i = LBound(bBytes) To UBound(bBytes)
    If bBytes(i) <> 26 Then
        strText = strText + Chr(bBytes(i))
    End If
Next

Dim arrlines() As String

arrlines() = Split(strText, vbCrLf)

For i = LBound(arrlines) To UBound(arrlines)
    List1.AddItem arrlines(i)
Next

CloseHandle hOrgFile

End Sub
Avatar billede sprit Nybegynder
08. april 2004 - 21:08 #7
Beklager lokespas, men jeg forventede en simpel kode.
Jeg kan slet ikke overskuge din kode.

Jeg har selv lavet følgende "løsning"
1. Før filerne bliver append'et sammen
2. så laver jeg en open fil til et array
3. derefter sletter jeg filen
4. tilslut udlæser jeg til det sammen filnavn.

      'indlæs filen i array
      FilNummer = FreeFile
        Open filsti(antalfil) For Input As #FilNummer
          Do While Not EOF(FilNummer)
            Line Input #FilNummer, MinString(linetxt)
            linetxt = linetxt + 1
          Loop
        Close #FilNummer

      'slet fil
      Kill filsti(antalfil)

      'genopret filen
      For gemx = 0 To linetxt - 1
        FilNummer = FreeFile
        Open filsti(antalfil) For Append As #FilNummer
          Print #FilNummer, MinString(gemx)
        Close #FilNummer
    Next gemx

Eneste funktion jeg ønsker er at fjerne det
sidste tegn i tekst filen, sidste tegn er EOF

Har nogen en supper simpel løsning.
ps. skal bruges i dos
Mvh Jan
Avatar billede kabbak Professor
08. april 2004 - 21:18 #8
Er du sikker på at det er EOF, hvis det er en fil lavet i dos, er det sikkert en FF (Form Feed) til printeren der er nederst.
Avatar billede kabbak Professor
08. april 2004 - 21:24 #9
Dec  Oct  Hex  Bin      HTML
012  014  00C  0001100  &#12;  FF    Form Feed

det vil sige at den hedder chr(12)
Avatar billede martin_moth Mester
09. april 2004 - 00:31 #10
Fjerne sidste tegn i en fil:

Åbn filen, læs det hele ind i en variabel, fjern sidste tegn (med Mid og Len) og gem igen.

Jeg kan ikke hitte ud af om du taler om een fil, om flere filer osv. Synes det er lidt uklart hvad du har gang i - du er lidt kortfattet, og fortæller lidt mindre end der er nødvendigt at vide for at undgå misforståelser... Men nedenstående kode fjerner sidste tegn i en fil, og det er vist det du spørger om...

  Dim FilNummer As Integer
  Dim MinStreng As String
  FilNummer = FreeFile
 
'Læser HELE filen
  Open "C:\MinFil.txt" For Input As #FilNummer
    MinStreng = Input(LOF(FilNummer), 1)
  Close #FilNummer
 
'Fjerner sidste tegn
  MinStreng = Mid(MinStreng, 1, Len(MinStreng) - 1)
 
'Skriver filer
  Open "C:\MinFil.txt" For Output As #FilNummer
    Print #FilNummer, MinStreng
  Close #FilNummer
Avatar billede sprit Nybegynder
09. april 2004 - 02:00 #11
takker jeg tror det kommer til at virke,
men jeg har lige en syntax fejl i

MinStreng = Input(LOF(FilNummer), 1)
"input past end of file"

Hvad mangler ?
Avatar billede sprit Nybegynder
09. april 2004 - 02:28 #12
Sorry martin_moth din kode var ok,
fejlen var min input fil.

Den indeholder:
0000    13016PAYCLBP0PAYCLBD0COM00 213    12004032720040327
0000    13021SYSCALP0SYSCALD0COM00  72    12004032720040327


Det sidste tegn, laver den omtalte syntax fejl.
Men da det er dette sidste tegn jeg skal
have fjernet, kan jeg ikke bruge dit bud.

Håber du kan finde tid til en ny løsning.

Mvh Jan
Avatar billede sprit Nybegynder
09. april 2004 - 03:37 #14
Hej igen jeg har næsten løsningen
  Open filsti(antalfil) For Binary As #FilNummer
    MinStreng = Space(LOF(1))
    Get #1, 1, MinStreng
  Close #FilNummer
Desværre efterlader den nu en tom linie,
som jeg skal have slette.

Har endnu ikke fundet ud af hvordan.
Avatar billede martin_moth Mester
09. april 2004 - 10:57 #15
Hvis tenget er i den sidste linie, som det eneste tegn, kan du jo bare læse filen linie for linie og droppe at læse den allersidste linie...
Avatar billede sprit Nybegynder
09. april 2004 - 12:11 #16
Hej igen nu har jeg selv løst den sidste ting.
Ved at slette de 2 sidste tegn i text filen,
er mit problem løst.

Jeg lukker hermed dette spørgsmål,
og takker alle for deres deltagelse.
Avatar billede sprit Nybegynder
09. april 2004 - 12:12 #17
Lukker nu
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