Dateien überprüfen und dann in Liste ausgeben.

BLADEooz

Mitglied
Hi, ich hab ma wieder ein Problem bei dem ich Hilfe bräuchte.
Wer sich gestern schon meine Post (bzw. meine zwei Posts zum gleichen Thema :rolleyes: , sorry nochmal) mit dem Betreff:"Datei einlesen, bestimmte Daten suchen" bzw. "Großes Problem mit meiner Aufgabe! Bitte helft mir!" gelesen hat weiß worum es geht.
Meine Aufgabe hat sich allerdings nun ein wenig geändert:

Zum besseren Verständniss zeig ich euch noch mal wie die .txt Dateien aussehen:

;
; Zone file for simpsons.at
;
; The full zone file
;
@ 1D IN SOA kirk.baltic.net hostmaster.baltic.net. (
20020410 ; serial, todays date + todays serial #
5H ; refresh, seconds
30M ; retry seconds
1W ; expire seconds
1D ) ; minimum, seconds
;
1D IN NS kirk.baltic.net. ;
1D IN NS ns2.tmag.de.
1D IN MX 10 kirk.baltic.net.
www 1D IN A 193.189.247.190

jetzt seht ihr, dass im unteren Teil zwei Servernamen stehen (kirk.baltic.net und ns2.tmag.de).
Nun ist es so, dass diese .txt Datei als nicht aktuell gilt, denn als aktuell gelten nur die Dateien in denen die die Zeilen mit den Servernamen so aussehen:
1D IN NS kirk.baltic.net. ;was hinterm ";" steht ist egal
1D IN NS worf.baltic.net. ;(wie viele Leerzeichen zwischen den Zeichenfolgen stehen ist egal)

Das heißt im Beispiel oben ist die eine Zeile richtig und die zweite mit ns2.tmag.de falsch.
Das Programm was ich schreiben soll, soll nun alle Dateien die nicht aktuell sind herausfinden und deren Namen dann in einer Liste oder so ausgeben.
Wichtig ist halt, dass diese zwei Zeilen so drin stehen, und dass nach den Zeilen nicht noch eine kommt die auch einen Servernamen enthält der vonden ersten zwei abweicht.

Tja und ich weiß nicht wie ich das machen soll. :(
Ich bin für jede Hilfe dankbar.
(Danke auch das ihr wieder mal so einen langen Text überhaupt durgelesen habt :) )

MfG
BLADEooz
 
Hallo, versuch´s mal so:
Gleiche Komponenten wie gestern, nur zusätzlich noch eine ListBox (List1).
Code:
Private Sub Command1_Click()
Dim Text As String
Dim Nr As Integer
Dim N As Long

For N = 0 To File1.ListCount - 1
 
 Nr = FreeFile
  
  Open File1.Path & "\" & File1.List(N) For Binary As #Nr ' Datei öffnen
    Text = Space(LOF(Nr))
    Get #Nr, , Text
  Close #Nr
  
' Zeichenkette suchen, falls nicht vorhanden Pfad und Dateiname in Liste eintragen

  If InStr(1, Text, "1D IN NS kirk.baltic.net.") = 0 Or InStr(1, Text, "1D IN NS worf.baltic.net.") = 0 Then 
    List1.AddItem File1.Path & "\" & File1.List(N)
  End If
  
Next

End Sub

Private Sub Form_Load()
  File1.Path = "D:\DeinOrdner" ' musst Du anpassen !!
End Sub
 
Wenn ich das so mache stellt er alle Dateien, egal ob richtig oder falsch in die ListBox. :(
Ich zeig dir mal eine Datei die richtig wäre:

;
; The full zone file
;
@ 1D IN SOA kirk.baltic.net. hostmaster.baltic.net. (
20040128 ; serial, todays date + todays serial #
5H ; refresh, seconds
30M ; retry seconds
1W ; expire seconds
1D ) ; minimum, seconds
;
1D IN NS kirk.baltic.net. ; Inet Address of name server
1D IN NS worf.baltic.net.
;
1D IN MX 10 kirk.baltic.net.
;
www 1D IN A 193.189.247.61

Also wie gesagt die Formatierung der Datei spielt keine Rolle, nur das was drinstheht.

Danke trotzdem. :)

Gruß
BLADEooz
 
Teilweise kann es sein, dass zwischen 1D IN NS Tabulatoren als Abstand benutzt wurden und ich hatte früher schon mal Probleme als ich eine Zeichenfolge in einer Textbox suchen wollte und vor ihr stand im Text ein Tab dann hat das Programm sie nicht gefunden obwohl sie da war.
Vielleicht hat's damit zu tun. Keine Ahnung :(
 
Wenn die Formatierungen in den Dateien nicht gleich sind dann wird´s schwierig.
Dann musst alle möglichen Formatierungen abfragen.
Eventuell nach NS noch ein vbTab einfügen.

Ändere folgenden Code.
Code:
  If InStr(1, Text, "1D IN NS kirk.baltic.net.") = 0 Or _
     InStr(1, Text, "1D IN NS worf.baltic.net.") = 0 And _
     InStr(1, Text, "1D" & vbTab & "IN" & vbTab & "NS kirk.baltic.net.") = 0 Or _
     InStr(1, Text, "1D" & vbTab & "IN" & vbTab & "NS worf.baltic.net.") = 0 Then
     
     List1.AddItem File1.Path & "\" & File1.List(N)
  
  End If
 
Da passiert leider das gleiche wie vorher, aber ich hab mal das 1D IN NS vor dem Servernamen weggelassen und dann sortiert er welche aus. Und ich hab mir mal 'n paar Dateien angeschaut und anscheinend ist dieses 1D IN NS immer vorhanden, nur die Servernamen dahinter ändern sich.
Das heißt also dass ich nur die Servernamen suchen lassen muss. :D

Also danke für deine Hilfe!

MfG
BLADEooz
 
hi,
alternativ zu X Formatierungen könntest du auch einfach nach allen Wörtern abfragen. Heißt du Fragst alle 4 Wörter ab (zB 1D, IN, NS, worf.baltic.net.) und verknüpfst sie mit einem AND. Wenn also in einer Zeile alle 4 Wörter vorkommen ist es ok. Dadurch würdest du sämtliche Leerzeichenkonstellationen abfangen können weil die Abstände zwischen den Wörtern irrelevant sind.

Beispiel:

Code:
If ((InStr(1, Text, "1D"=0) AND InStr(1, Text, "IN"=0) AND InStr(1, Text, "NS"=0)  AND InStr(1, Text, "kirk.baltic.net."=0)) OR _
(InStr(1, Text, "1D"=0) AND InStr(1, Text, "IN"=0) AND InStr(1, Text, "NS"=0)  AND InStr(1, Text, "NS worf.baltic.net."=0))) then
usw.

Hoffe mal da ist jetzt kein Fehler drin, hab es nicht getestet, aber hoffe das Prinzip ist klar (und richtig ;)).

Gruß
 
Das heißt also dass ich nur die Servernamen suchen lassen muss.
Wenn ich mir die textdatei von dir ansehe kannst du das aber wiederrum nicht so machen. Weil der Servername taucht ja auch woanders auf, zB
@ 1D IN SOA kirk.baltic.net hostmaster.baltic.net. (
hier.
Du solltest schon gucken das du die exakte Zeile findest. Es sei denn, dass sobald die Server irgenwo erwähnt werden, sie auch auf jedenfall so wie gesucht eingetragen sind.

Gruß
 
Das Problem ist dass nicht alle Dateien gleich aufgebaut sind, dass heißt es ist teilweise unterschiedlich in welcher Zeile die Servernamen auftauchen.
Aber in der Zeile:
@ 1D IN SOA kirk.baltic.net hostmaster.baltic.net. (
ist der Servername immer kirk.baltic.net.
Und ich hab mir noch mal mehrere Dateien angeschaut und es scheint so als ob auch ein Servername immer gleich bleibt, kirk.baltic.net , das würde heißen ich müsste nur noch worf.baltic.net überprüfen.

Wenn ich übrigens alle Zeichenfolgen (1D IN NS) abfragen lasse dann wird mir "Laufzeitfehler 13 Typen unverträglich" angezeigt. Ich konnte aber nicht rausfinden wo in deinem Code der Fehler liegt.

MfG
BLADEooz
 
Davon mal abgesehen, meine Aufgabe wurde grad wieder erweitert.
Also:
Ich sollte ja alle falschen Dateien ausgeben, so weit klappt das ja dank eurer Hilfe auch ganz gut. Was ich jetzt machen soll ist:

Das Programm soll jetzt ausgeben was bei den falschen Dateien anstatt der richtigen Servernamen bzw. des richtigen Servernamens(ich geh jetzt mal davon aus dass sich nur worf.baltic.net ändert) steht. Soll heißen neben der Liste sollen auch die dazugehörigen Fehler stehen. Da gibt es nur ein Problem, da der Aufbau der einzelnen Dateien abweicht kann ich schlecht angeben dass das Programm in die und die Zeile springen soll und genau das und das Wort herausschreiben soll.

Hat einer ne Idee wie das gehen soll?!
Ich kann verstehen falls ihr nicht mehr die Motivation habt mir weiter zu helfen. :)

MfG
BLADEooz
 
Zurück