ip-puppi
Goto Top

Entferne Zeilen bzw. Buchstaben aus einer

Textbasierten Datei ….

Hallo Alle zusammen …

Ich möchte gern das Scriptbasierte bearbeiten von Textfiles erarbeiten …

Ich könnte es auch über ExcelMarco machen … finde es aber sehr umständlich, gerade was beim abspeichern herraus kommt.
Daher der Versuch ("jetzt") über das lernenverstehenanwenden von VB.

… bin gern bereit dazu zu lernen … hoffe natürlich auf ein paar helfende Unterstützer !

Was möchte ich gern erreichen :

TextFile einlesen (über varDatei) und Zeilen löschen ( nutze anfängerhaft gezielte Inhalt einer Zeile (strSearch) ) um die Zeile zu identifizieren , um diese dann zu löschen ! Denn das erkenne und zählen von Zeilen ist mir nicht (noch nicht bekannt) !
… wäre super zu wissen, wie ich sagen kann "Einlesen, zähle Zeile 1 bis 5 (auch leere Zeilen) und lösche diese!

Danach den Inhalt der geänderten Datei neu abspeichern (varTmpDatei)

Weiterhin würde ich gern unnötige "Buchstaben" … oder wie auch immer man diese Variablen/String(z.B. "x") nennt, durch ein Leerzeichen ersetzen.

Momentan habe ich folgendes "geschustert :

Set MyFiles = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2

varDatei="C:\Test\201902191220.rep"  
varTmpDatei="C:\Test\HA174_1-5a.txt"  
Set fin = MyFiles.OpenTextFile(varDatei, ForReading)
Set fout = MyFiles.OpenTextFile(varTmpDatei, ForWriting, True)

strSearch = "Fabrikationsnr."  

do while not fin.AtEndOfStream
      strline = fin.readLine()
      if instr(1,strline, strSearch) = 0 then		
              'Zu entfernende Zeile nicht gefunden, also Zeile ausgeben  
              fout.writeline strline
      end if
loop

Leider funktioniert bei einer Erweiterung, also nicht nur ein Suchobjekt (strSearch), es nicht immer . !

Frage : warum löscht er z.B. nicht die Zeile XY wenn dort doch auch z.B. : strSearch = "Datei"
abgefragt wird ?

Also so z.B. :
Set MyFiles = CreateObject("Scripting.FileSystemObject")  
Const ForReading = 1, ForWriting = 2

varDatei="C:\Test\201902191220.rep"  
varTmpDatei="C:\Test\HA174_1-5a.txt"  
Set fin = MyFiles.OpenTextFile(varDatei, ForReading)
Set fout = MyFiles.OpenTextFile(varTmpDatei, ForWriting, True)

strSearch = "Fabrikationsnr."  
strSearch = "Datei"  
strSearch = ".rep"  

do while not fin.AtEndOfStream
      strline = fin.readLine()
      if instr(1,strline, strSearch) = 0 then		
              'Zu entfernende Zeile nicht gefunden, also Zeile ausgeben  
              fout.writeline strline
      end if
loop

Muss ich eine Reihenfolge einhalten … oder den Inhalt der Datei komplett einlesen ?

Es wird die Zeile z.B. mit "Datei" NICHT gelöscht, obwohl der String dort zu finden ist? Stört ihn, dass es mehrmals "Datei" gibt … oder woran kann es liegen?

Versteh ich im Moment (noch) nicht … für Hilfe hierbei --- "tausend Dank"!!!

Vielleicht ist meine Herangehensweise auch ganz falsch …

Schön wäre auch eine Info über den Code, der ALLE Dateien mit einer Endung *.rep anspricht

Content-ID: 430346

Url: https://administrator.de/contentid/430346

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

TripleDouble
TripleDouble 21.03.2019 aktualisiert um 08:35:34 Uhr
Goto Top
Hallo,

in Deinem zweiten Code-Schnipsel wird nur nach ".rep" gesucht, da Du die Variable "strSearch" dreimal setzt und der letzte Eintrag (strSearch = ".rep") gewinnt. Bei mehreren Suchkriterien müsstest Du Dich mit Arrays beschäftigen (strSearch = "Fabrikationsnr.", strSearch[1] = "Datei", strSearch[2] = ".rep", ...) und bei der Überprüfung eine Schleife über alle Elemente des Arrays laufen lassen.

Gruß - TD
IP-PUPPI
IP-PUPPI 21.03.2019 aktualisiert um 11:32:27 Uhr
Goto Top
Guten Morgen TripleDouble,

vielen Dank das du dir Zeit genommen hast zu antworten …

Also wenn ich es richtig verstehe, muss ich folgendes einbauen :

1. Array Größe bestimmen … mit (Dim arr(5) ) ? ...für 5 Strings
2. die Arrays bennenen .. also
arr(0) = "strSearch"
arr(1) = "strSearch[1]"
arr(2) = "strSearch[2]"
arr(3) = "strSearch[3]"
arr(4) = "strSearch[4]"
arr(5) = "strSearch[5]"
3. von einem Array zum nächsten springen … mit NEXT ?

Oder hab ich das falsch verstanden?

Danke Dir....
TripleDouble
TripleDouble 21.03.2019 um 13:46:01 Uhr
Goto Top
Ich bin nicht so der VB-Crack, aber so müsste es (ungetestet!) klappen:

Dim arrStrSearch(3) as String
Dim i as Integer
Dim Found as Boolean

arrStrSearch(1) = "Fabrikationsnr."  
arrStrSearch(2) = "Datei"  
arrStrSearch(3) = ".rep"  

do while not fin.AtEndOfStream
	Found = False

	strline = fin.readLine()

	For i = 1 to 3
		if instr(1,strline, strSearch(i)) <> 0 then // Einer Suchbegriffe wurde gefunden
			Found = True
		end if
	Next i

	// Falls kein Suchbegriff gefunden wurde, Zeile ausgeben
	if Found = False Then
		fout.writeline strline
	end if
loop

Gruß - TD
IP-PUPPI
IP-PUPPI 03.04.2019 um 11:59:02 Uhr
Goto Top
Guten Morgen …


so, werde das Ganze mal einbetten und versuchen.

Vielen Dank TripleDouble