ja der Titel ist nicht wirklich aussagekräftig aber derzeit fällt mir nichts anderes ein. Ich lese per StreamReader eine Datei und möchte sie zeilenweise überprüfen. Das ist soweit nicht das Problem, das Problem ist: Ich lese die Datei und lass mir zeilenweise den Inhalt ausgeben. Dabei zeigt sich, das ich nur vllt. 5-6 Zeilen ausgegeben bekomme und der Rest einfach übersprungen wird. Der Zeiger beginnt auch gar nicht bei der ersten Zeile sondern fängt einfach mal bei der 3 oder 4 an.
Ich versuche das mal in Stichworten zusammenzufassen (ich bin recht schlecht in Erklären):
Was soll gemacht werden?
1. Datei einlesen
2. Jede Zeile auf ein bestimmtes Muster überprüfen
3. Ergebnis in eine DataTable speichern
Problem
1. Der Zeiger beginnt, bei der eingelesenen Datei nicht in der 1. Zeile
2. Es werden nur wenige Zeilen gelesen, nicht alle
Aktueller Code
Anm: Wir benutzen IronPython
Code: Alles auswählen
def fp_AnalyseFiles(pDt1):
try:
DetailsBox.Show("Start der Dateianalyse.")
#mStrStartPath enthält einen gültigen Pfad.
DetailsBox.Show(mStrStartPath)
dt1 = DataTable("Analyses")
dt1.Columns.Add("number").AutoIncrement = True
dt1.Columns.Add("incrementalpath")
dt1.Columns.Add("line")
dt1.Columns.Add("string")
dt1.Columns.Add("filename")
dt1.Columns.Add("extension")
#Durchlaufen der DataTable pDt1.
for row1 in pDt1.Rows:
#Entfernen des ersten Backslashs und anschließendes Speichern in einer Variable
strIncrementalPath = row1["incrementalpath"].Substring(1)
#Zusammenfügen des Startpfads und des Inkrementalpfads
strFile = Path.Combine(mStrStartPath, strIncrementalPath)
#Überprüfen ob die Datei existiert.
if File.Exists(strFile):
#Datei öffnen und lesen.
objFile = StreamReader(strFile)
DetailsBox.Show(strFile)
while objFile.ReadLine():
#@TODO
#Den Inhalt auf clr-Einträge per Regex überprüfen.
#Muster des Regulären Ausdrucks. (NICHT FERTIG)
#Das aktuelle Pattern matched "import clr" und alle Zeilen, die ein "clr.*" enthalten
#Das Pattern wurde getestet und funktioniert.
strPattern = r"^(import\sclr|clr\.[\w+]+\([a-z0-9\.\,\"]+\))$"
objRegex = Regex(strPattern)
#Beinhaltet die Anzahl an gefundenen Treffern.
objMatch = objRegex.Match(objFile.ReadLine())
DetailsBox.Show(objFile.ReadLine() + objMatch.Value)
#Wenn Treffer gefunden wurden, lege eine neue Zeile an.
if (objMatch.Success == True):
row2 = dt1.NewRow()
row2["incrementalpath"] = row1["incrementalpath"]
row2["filename"] = row1["filename"]
row2["extension"] = row1["extension"]
dt1.Rows.Add(row2)
objFile.Close()
return dt1
except Exception as ex:
DetailsBox.Show(ex)
Naja, ich hoffe mir kann geholfen werden
Danke und Gruß
Fortuna