Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
508to512
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
508to512
508to512
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

EOF Prüfung

EOF Prüfung
01.11.2004 18:12:05
Jens_Pu
Hallo Excelfreunde,
habe mir eine Routine zum anpassen einer HTML-Telefonliste geschrieben.
Die beiden Schleifen Du Until EOF() bereiten mir Kopfzerbrechen.
Jede der beiden Schleifen macht immer eine Durchlauf zu viel.
In der Hilfe habe ich gefunden, daß EOF erst dann True wird, wenn kein kompletter Datensatz mehr eingelesen werden kann. Das Problem ist nur, so bekomme ich in jeder der beiden Schleifen die letzte Zeil doppelt in meine Zieldatei. Hat jemand eine Idee, wie ich das verhindern könnte?


      
Sub Convert_TelLi()
  
Dim strZeile As String
  
Dim strAlpha As String * 1
  
Dim strSeitenanfang As String
  
Dim strOut As String
  
Dim blnKopfGeloescht As Boolean
  
Dim lngDollPos As Long
  
Dim lngParaPos As Long
  
Dim iFile1 As Integer
  
Dim iFile2 As Integer
  
Dim iFile3 As Integer
  
  strSeitenanfang = "<a href=" & Chr(34) & "#Seitenanfang" & Chr(34) & ">Seitenanfang"
  blnKopfGeloescht = 
False
  
  
On Error Resume Next
  
  
Close
  iFile1 = FreeFile
  
Open ThisWorkbook.Path & "\TelLi.txt" For Binary As #iFile1
  iFile2 = FreeFile
  
Open ThisWorkbook.Path & "\Temp.txt" For Output As #iFile2
  iFile3 = FreeFile
  
Open ThisWorkbook.Path & "\TelLiKopf.txt" For Binary As #iFile3
    
  
'Kopfdaten in Zielfile übertragen
  Do Until EOF(iFile3)
    Line 
Input #iFile3, strZeile
    
Print #iFile2, strZeile
  
Loop
  
  
Close #iFile3  'Kopfdatenfile schließen
  Close #iFile2  'Tempdatei schließen
  
  iFile2 = FreeFile
  
Open ThisWorkbook.Path & "\Temp.txt" For Append As #iFile2
  
Do Until EOF(1)
    Line 
Input #1, strZeile
    
    
'Löschen der Kopfzeilen, bis die eigentliche Tabelle beginnt: letzte zu löschende Zeile enthält: <BODY>
    Do While blnKopfGeloescht = False
      
If strZeile = "<BODY>" Then
        blnKopfGeloescht = 
True
      
End If
      Line 
Input #iFile1, strZeile
    
Loop
    
    
'Steuerzeichen positionen ermitteln
    lngDollPos = InStr(1, strZeile, "$", 0)
    lngParaPos = InStr(1, strZeile, "\'a7", 0)
    
    
'Zeilen analysieren und verarbeiten
    strAlpha = ""
    
If lngDollPos > 0 Then      '$ gefunden
      If Mid(strZeile, lngDollPos + 2, 1) = "$" Then '$?$
        strAlpha = Mid(strZeile, lngDollPos + 1, 1)
        strOut = Left(strZeile, lngDollPos - 1) & "<a name=" & Chr(34) & strAlpha & Chr(34) & _
                 ">" & strAlpha & "<" & Chr(47) & "a>" & Mid(strZeile, lngDollPos + 3)
      
End If
    
ElseIf lngParaPos > 0 Then  '\'a7 gefunden
      strOut = Left(strZeile, lngParaPos - 1) & strSeitenanfang & Mid(strZeile, lngParaPos + 1)
    
Else
      strOut = strZeile         
'KEINE Steuerzeichen gefunden
    End If
    
    
'Dateiende analysieren und verarbeiten
    If Right(strOut, 14) = "</BODY></HTML>" Then
      strOut = Mid(strOut, 1, Len(strOut) - 14)
    
End If
    
    
Print #iFile2, strOut       'String in Temp-Datei schreiben
  Loop
  
Close
  Kill ThisWorkbook.Path & "\TelLi.htm"
  
Name ThisWorkbook.Path & "\Temp.txt" As ThisWorkbook.Path & "\TelLi.htm"
End Sub 

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: EOF Prüfung
Ramses
Hallo
ganz einfach :-) :
Sorg dafür dass deine Quelldatei in der letzten Zeile nach dem letzten Wert einen sauberen CR hat,... und schon klappts :-)
Alternativ,... wenn du dir sicher bist, dass die letzte immer doppelt ist, kannst du sie ja auch löschen ;-)
Gruss Rainer
AW: EOF Prüfung
Jens_Pu
Hallo Ramses,
weiß zwar nicht was Du unter einem sauberen CR verstehst, in meinen Dateien steht als letztes jeweils Hex: 0D0A
Gruß Jens
AW: EOF Prüfung
Ramses
Hallo
CR = Carriage Return
und zeigt den Abschluss der Zeile/ des Absatzes an.
Wieso in deiner txt-Datei als letztes Zeichen ein Hex-Wert stehen soll, erschliesst sich mir leider nicht !?
Gruss Rainer
Anzeige
AW: EOF Prüfung
01.11.2004 19:34:12
Jens_Pu
Hallo Rainer,
weil man jede Textdatei auch mit einem Hex-Editor ansehen kann. So sieht man auch die Zeichencodes von nicht sichtbaren Zeichen sehen kann. Z.B. Leerzeichen und Tabulator.
Wie sehen denn Deine Leerzeichen und Tabulatoren am Bildschirm aus?
Gruß Jens
AW: EOF Prüfung
Ramses
Hallo
Sorry,... ich glaube wir reden aneinander vorbei.
Du willst eine Textdatei einlesen ?
Ja &gt Warum erzählst du mir dann was von HEX Zeichen. Weiter bei JA &gt JA
Nein &gt Dann ziehe ich meine Antwort zurück und du musst nach was anderem umschauen
Ja &gt JA &gt Weil ein "Line Input" nunmal das CR ( Eine ganz normale Zeilenschaltung mit der Taste "Enter" oder auch "Eingabe" genannt, erwartet.
Wenn nun das CR nicht kommt, kann es eben sein, dass "Line Input" eben die letze Zeile doppelt einliest, bevor es zum eigentlichen Datei-Ende kommt.
Alles klar... ?
Gruss Rainer
Anzeige
AW: EOF Prüfung
Jens_Pu
Hallo Ramses,
CR = Hex0D0A
Die Zeilenschaltung kommt doch am Ende der Datei.
Das das ist doch das Problem.
Die Zeile ist korrekt abgeschlossen.
Und trotdem habe ich in der Zieldatei die letzte Zeile doppelt.
Gruß Jens
Input statt Binary o.T.
Jens_Pu
AW: EOF Prüfung
Ramses
Hallo
Sorry, keine Ahnung.
Alternativ würde ich mal
Open .... For Input As #1
anstelle von Binary verwenden und schauen was passiert.
Gruss Rainer
AW: EOF Prüfung
Jens_Pu
Hallo Ramses,
schrub ich doch 19:58h. Genau dás wars.
Danke trotzdem.
Gruß Jens
AW: EOF Prüfung
Ramses
Hallo
das habe ich erst gesehen nachdem ich den Beitrag geschrieben habe.
Musste etwas länger in der Hilfe suchen ;-)
Gruss Rainer
Anzeige
AW: EOF Prüfung
01.11.2004 21:17:31
Jens_Pu
Hallo Ramses,
ich finde die Hilfe zu Open und den verschiedenen Modi ist besch...
Was ist Deine Meinung?
Und an vielen anderen Stellen läß sie auch zu Wünschen übrig.
Das sind dann hier immer wieder die einschlägigen Fragen.
;-)
Gruß Jens
AW: EOF Prüfung
Ramses
Hallo
:-)
Also da bin ich nicht deiner Meinung :-)
"...Bei Dateien, die im Zugriffsmodus Binary geöffnet wurden, führt der Versuch, sie so lange mit Hilfe der Input-Funktion zu lesen, bis die EOF-Funktion True zurückgibt, zu einem Fehler. Verwenden Sie statt EOF die Funktionen LOF und Loc, wenn Sie mit Input binäre Dateien lesen. Oder verwenden Sie die EOF-Funktion mit Get..."
Das ist doch eigentlich ziemlich einleuchtend,.. oder ?
Gefunden übrigens unter dem Suchbegriff "Input" ;-)
Es gibt allerdings hier und da noch Fragen die besser erklärt werden könnten,... da stimme ich dir zu ;-)
Gruss Rainer
Gruss Rainer
Anzeige
O.T. Hilfe zu Open
Reinhard
Hallo Rainer,
die ganzen Dateiöffnungsmodi bzw Reinschreibmodi usw. finde ich genau wie Jens völlig zusammenhangslos beschrieben, da fehlen Infos ohne Ende, ich blicke da echt nicht durch.
Gut, ich habe kein Fachbuch, mein Fehler, aber nur aufgrund der Hilfe was anderes zu machen als input #1 bzw print #1 erfordert von mir wahnsinnig viel Zeit, eine verständlichere Hilfe wär da schon mein Wunsch.
Und, leugne es nicht ab, du hast schon sehr große Ahnung von Excel *hihi*, keine Ahnung wodran der andere das sah (der mit dem Riesendatei einlesen), ich weiss es für mich vom Lesen deiner Beiträge:-))
Gruß
Reinhard
Anzeige
AW: EOF Prüfung
02.11.2004 00:41:43
Jens_Pu
Hallo Rainer,
da bin nun ich wieder nicht deiner Meinung.
Man sucht Stundenlang in der Hilfe herum und erhält trotzdem keinen Überblick.
Der Punkt "siehe auch" in der Hilfe unter "Open" enthält bei mir "Close" und "Freefile".
Nix Beschreibung der unterschiedlichen Modi: Append, Binary, Output, Random.
Nix Get, LOF, LOC auch kein Hinweis in Richtung Shared, Lock Read, Lock Write und Lock Read Write. Die Begriffe stehen alle drin, das stimt schon, aber kein weiterführender Link und keine Erklärung.
Was irgendwie total fehlt sind Übersichten der Thematisch zusammengehörigen Befehle.
Z.B. Dateimanagement, Textfunktionen wie Len, Instr etc.
Man kann sich eben keinen Überblick verschaffen.
Hast Du schon mal die Suche in der Hilfe verwendet?
Such doch mal nach einem Begriff "Textfunktionen".
Da könnte man schon noch einiges verbessern.
Gruß Jens
In Excel 97 gab es bei manchen Befehlen so übergeordnet Übersichten.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige