Zeilen löschen eines Textes in VB

Guten tag

ich möchte gerne ein Programm schreiben womit ich bestimmte Zeilen aus einer Datei löschen kann und die übrig gebliebenen Zeilen in der Datei oder einer Outputbox sichtbar werden. Das ganze sollte wenn möglich in der Programmier-Sprache VB geschrieben sein.

Hier ein Paar Beispiel Zeilen (variieren natürlich und sind auch viiieeellleeee Mehr XD ):

INSERT INTO gameobject_spawns VALUES (‚99863‘, ‚300147‘, ‚0‘, ‚1‘, ‚1‘, ‚-43.4367‘, ‚-923.198‘, ‚55.8714‘, ‚5.75401‘, ‚0‘, ‚0‘, ‚0.261511‘, ‚-0.965201‘, ‚25‘, ‚0‘, ‚1‘);
INSERT INTO gameobject_spawns VALUES (‚30054‘, ‚2030‘, ‚0‘, ‚1‘, ‚1‘, ‚758.712‘, ‚-1467.83‘, ‚78.6684‘, ‚1.4399‘, ‚0‘, ‚0‘, ‚0.659346‘, ‚0.75184‘, ‚7200‘, ‚100‘, ‚1‘);

In diesem Beispiel sollte z.b. die obere Zeile übrig bleiden und die untere Zeile (eine zeile fängt beim Insert an) gelöscht werden. Der ort an dem die Zeilen in der Datei stehen sind variabel.

Ich habs mir so vorgestellt das das Programm 2Textboxen hat eines ist das Inputfeld, das andere das Outputfeld. Dadrunter kommt ein Button und eine Progressbar. Wenn man nun das programm startet und den Inhalt der Datei (in dem diese spezieren zeilen von oben stehen) einfügt und dann auf den Button drückt werden aus den Input mehrere Zeilen mit einem bestimmten inhalt gelöscht. wenn sie dann gelöscht sind wird der rest in den Output eingefügt und das programm hat seine arbeit getan :smile:. Die zu löschenden Zeilen sind dabei keine Variablen jedoch sind alle anderen Zeilen die in den out put sind variablen die je nach input immer unterschiedlich sind.

hoffe ihr versteht was ich meine :smile:

Vielen dank im vorraus
Wofsauge

Hallo Wolfsauge…

Allzu viel Programmcode kann ich dir im Moment nicht geben, da fehlt mir im Moment die Zeit dafür aber zumindest ein wenig… Allerdings kann ich dir im Moment nur VB.net Code zur Verfügung stellen.

Ich gehe mal davon aus das du den Text nicht händisch in die Input_TextBox einfügst, sondern dir die Datei automatisch auslesen lässt. Dann würde das Auslesen etwa so aussehen:

Dim ReadedText As String = „“
FileOpen(1, „{Dateiname}“, OpenMode.Input)
Do While Not EOF(1)
ReadedText = LineInput(1)
If ReadedText = „{Der auszuschließende Dateiinhalt}“ Then
Output_TextBox.Text = ReadedText & vbCrLf
Else
Input_TextBox.Text = ReadedText & vbCrLf
End If
Loop
FileClose(1)

Der Code sagt aus, dass die Datei {Dateiname} geöffnet wird und die Datei solange mit LineInput(1) zeilenweise ausgelesen wird, bis das Dateiende erreicht ist. Wenn nun eine der Textzeile der Datei den auszuschließenden Text {Das auszuschließende Dateiinhalt} enthält, wird die entsprechenden Zeile in die Output_Textbox geschrieben. Andernfalls wird der gelesene Dateiinhalt in die Input_TextBox geschrieben.

Wenn du nun anschließend auf deinen Button klickst und der restliche Dateiinhalt in die Datei geschrieben werden soll, dann würde das in etwa so aussehen…

FileOpen(1, „{Dateiname}“, OpenMode.Output)
Print(1, Input_TextBox.Text)
FileClose(1)

Der Inhalt der Input_TextBox wird dann einfach in die Datei {Dateiname} geschrieben.

Das wäre jetzt das was mir um 5 Uhr in der früh einfallen würde… ^^

Hoffe du kannst was damit anfangen… :smile:

MfG,
Thomas

PS: Ich stelle grad mit Erschrecken fest, es ist nicht unbedingt das was du wolltest aber den Code kannst du entsprechend abwandeln für deine Zwecke… :smile:

MfG,
Thomas

Hallo,

für mich stellen sich hier zwei Fragen: gibt es einen festen Grund für die Textboxes und wie werden die zu löschenden Zeilen ausgesucht?
Falls die Textboxes nicht zwingend notwendig sind, würde ich das ganze wahrscheinlich direkt mit der Datei machen, sprich öffnen (open „Pfad1“ for input as #1; open "Pfad2 for output as #2), einlesen (ich glaub das war mit „get“, bin momentan ziemlich draußen aus VB) aussortieren und dann in die zweite Datei schreiben (wahrscheinlich mit „put“).
Dieses Vorgehen hätte den Vorteil, dass eine Zeile nach der anderen eingelesen werden kann, dann geprüft wird, ob sie gebraucht wird und nur bei Bedarf geschrieben wird. Zusätzlich gehe ich dann davon aus, dass ich keine Positionsüberprüfung mit Instr oder Mid$ brauche um die nächste Position von „INSERT“ zu finden. Ebenfalls ein Vorteil ist, dass TExtboxen nur eine bestimmte Größe besitzen dürfen, die deutlich geringer ist als die erlaubte Größe von Dateien (~4 kB Textboxgröße glaub ich gg. 2 GB Dateigröße). Kann bei Dir bei den „viiieeellleeee(n)“ Zeilen evtl. interessant sein, das zu berücksichtigen.

Hoffe das hilft als Anregung.

Schönen Gruß,

Martin

wenn ich es richtig verstanden habe, dann würde ich eine Eingabedatei nehmen (FileSystemObject.TextStream) und eine Ausgabedatei (auch FSO).
Dann zeilenweise einlesen, die Zeile mit dem Inhalt der Textbox vergleichen und bei „nicht gleich“ die Zeile in die Ausgabedatei schreiben.
Falls mehrere unterschiedliche Zeilen gelöscht werden müssen, diese in mehreren Abfragen oder mehreren Durchläufen löschen.

Tuts das?

Tom

Hallo,

einfach zwei Listboxen bauen. Dann mit einer Schleife in der linken suchen und die Zeilen entfernen die man nicht braucht und dann in einem zweiten Durchlauf auf der rechten Seite das was übriggeblieben ist einfügen.

Schleife:
For x = 0 To lst_auswahl.ListCount - 1
’ Die Prüfung
Next x

Insert Listbox:
lst_auswahl2.AddItem lst_auswahl.List(lst_auswahl.ListIndex) lst_auswahl2.ListCount

Grüße,
Stefan

ich glaube du verstehst nicht was ich will.

Ich will aus einer Datei bestimmte Zeilen löschen und der Rest der übrig bleibt in eine Textbox (oder direkt in die Ausgangsdatei) einfügen lassen und schon wäre das ganze fertig.
Ich hoffe Du und der rest (Fals sie diese antwort auch lesen können (bin ein Wer-Weiss-Was noob XD )) wisst nun was ich genau will.

Danke
Wofsauge (OHNE L )

Vielen dank für deine hilfe aber es funktioniert nicht :smiley:

Es sind 9000 Zeilen die gelöscht werden müssen der rest der übrig bleibt (so um die 500 zeilen) sollen entweder in der Datei drin bleiben oder in die textbox eingefügt werden.

ich stelle mir das so vor (nach deinen Brainstorming natürlich:wink: ) :

Das VB programm hat einen Datei Input, wo man die Datei sucht und den Pfad dafür einfügt (kannst du mir dann auch erklähren wenn du magst) und 1 Button der den Lösch Prozess zu starten und ein Progressbalken der den fortschritt anzeigt (kann ich selber :smiley:).

Fals es etwas hilft ich habe alle zu löschenden Zeilen in eine Datei gespeichert jedoch muss das programm jede zeile einzelnt suchen da zwischen den Zeilen auch eine Variirende Zeile exestieren kann.

ich hab das ganze schonmal als PHP script gemacht jedoch hat das wegen zeitlichen gründen (1stunde pro löschung XD) nicht richtig funktioniert. Ich zeig dir das mal vielleicht hilft es dir weiter.

$linesToDelete = array(
‚INSERT INTO gameobject_spawns VALUES (‚99863‘, ‚300147‘, ‚0‘, ‚1‘, ‚1‘, ‚-43.4367‘, ‚-923.198‘, ‚55.8714‘, ‚5.75401‘, ‚0‘, ‚0‘, ‚0.261511‘, ‚-0.965201‘, ‚25‘, ‚0‘, ‚1‘);‘,
‚INSERT INTO gameobject_spawns VALUES (‚30054‘, ‚2030‘, ‚0‘, ‚1‘, ‚1‘, ‚758.712‘, ‚-1467.83‘, ‚78.6684‘, ‚1.4399‘, ‚0‘, ‚0‘, ‚0.659346‘, ‚0.75184‘, ‚7200‘, ‚100‘, ‚1‘);‘,
‚INSERT INTO gameobject_spawns VALUES (‚99864‘, ‚300146‘, ‚1‘, ‚1‘, ‚1‘, ‚-3573.24‘, ‚-1864.45‘, ‚82.4975‘, ‚4.13904‘, ‚0‘, ‚0‘, ‚0.878193‘, ‚-0.478305‘, ‚25‘, ‚0‘, ‚1‘);‘,

…(und so weiter halt)…

);
// make sure line breaks are always detected
$txt = preg_replace(’/\r\n|\r/’, „\n“, $_POST[‚tb1‘]);
// split lines to single array entrys
$textboxLines = explode("\n", $txt);
// get array with the correct values
$newLines = array_diff($textboxLines, $linesToDelete);
// write the remaining lines to the document
print(implode("\n", $newLines));
?>

Ich hoffe das hilft dir weiter :smile:

Vielen Dank schonmal ,

Wofsauge

Hi,

das mein bisschen Code nicht funktioniert war vorherzusehen. :smile:

Also zum Coden hab ich im Moment nicht viel Zeit, daher versuche ich es dir so näher zu bringen. Ich weis ja nicht wie weit fortgeschritten du in VB.net bist, von daher versuche ich mich möglichst verständlich auszudrücken.

Also du hast eine Datei A die alle Datensätze enthält und entsprechend bearbeitet werden muss. Dann hast du eine Datei B die alle Datensätze enthält die in Datei A gelöscht werden müssen. Und du hast eine Datei C in der die übrigen gefilterten Datensätze hineingeschrieben werden sollen.

Meine Idee wäre jetzt Datei A auszulesen, mit den Datensätzen in Datei B zu vergleichen und das Resultat in Datei C abzuspeichern. Damit du jetzt aber nicht jeden Datensatz in Datei A mit jedem Datensatz in der Datei B vergleichen musst, kannst du dich mit einem Trick behelfen. Bereite die Datei B so vor, das alle Datensätze einen Präfix und Suffix haben. D.h. du schreibst vor und nach jedem Datensatz ein oder mehrere eindeutige Zeichen…
Beispiel:
@INSERT INTO gameobject_spawns VALUES (‚99863‘, ‚300147‘, ‚0‘, ‚1‘, ‚1‘, ‚-43.4367‘, ‚-923.198‘, ‚55.8714‘, ‚5.75401‘, ‚0‘, ‚0‘, ‚0.261511‘, ‚-0.965201‘, ‚25‘, ‚0‘, ‚1‘);@

Das hat den Sinn, dass du dann nicht jeden Datensatz mit jedem Datensatz einzeln vergleichen musst, sondern du lediglich nur noch mittels INSTR() eine Abfrage startest und dann entweder 0 (Null) oder > 0 zurück bekommst. Ist das Ergebnis 0 (Null) ist der Datensatz nicht dabei, wenn > 0 dann ist der Datensatz vorhanden. Dazu aber gleich mehr…

Den Programmablauf würde ich jetzt so schreiben.
Als erstes lädst du die gesagte Datei B in den Speicher. Und zwar als EINE Variable des Typs STRING ohne irgendwelche Arrays oder der gleichen… Es muss der gesamte Dateiinhalt in einer Variable liegen. Diese nenne ich jetzt einfach mal „VariableB“.
Danach öffnest du Datei A und liest zeilenweise den Dateiinhalt aus. Du liest nun den ersten Datensatz aus der Datei A, hängst das Präfix und Suffix an den Datensatz ran und fragst mit INSTR() die „VariableB“ ab um zu sehen, ob der gelesene Datensatz in der Variable vorhanden ist. Wenn ja (INSTR() gibt einen Wert > 0 zurück), ignoriere diesen Datensatz weil er ja gelöscht werden kann. Wenn nein (INSTR() gibt Wert 0 (Null) zurück), kann der Datensatz in die Datei C geschrieben werden. Danach kommt das gleichen mit dem nächsten Datensatz aus der Datei A.

So wie ich nämlich dein Script gelesen habe (OK ich bin kein Fan von PHP), würde dieses quasi 9.000 Datensätze mit jeweils z.B. 1.000 Datensätzen vergleichen. Das wären dann 9.000.000 Abfragen und das würde nicht mehr in Relation stehen… Wenn du aber diese z.B. 1.000 Datensätze in eine Variable zusammenfaßt (mit dem Präfix und Suffix als Trennzeichen), brauchst du die 9.000 Datensätze lediglich mittels INSTR() und der Variable vergleichen. Dann hast du lediglich nur 9.000 Abfragen und müsstest dann nur eine Wert zwischen 0 (Null) und > 0 auswerten.

Hoffe das war soweit verständlich… :smile:

MfG,
Thomas

PS: Noch mal zurück zum Präfix und Suffix. In deinem Fall musst du das nicht machen da deine Datensätze ein relativ schönes Format haben. Das Präfix in deinem Fall wäre INSERT INTO und dein Suffix wäre ’);
Von daher bräuchtest du das hier nicht machen. Es hat nur den Hintergrund, dass deine Datensätze einen eindeutigen Anfang und Ende haben. Das aber nur am Rande…

ähm ja tut mir leid ich versteh zwar n bischen was du meinst aber so richtig durch blicken kann ich nicht (bin net son vb ass und kenn nur 4 befehle oder so :smiley: ) wäre schön wenn du schnell ein script schreiben könntest mit 3 zeilen die ich gepostet habe und dann alles so machst wie du meinst das das klappen könnte :smile:
wäre echt nett von dir wenn du das machen könntest :smile:

danke
Wofsauge

Hi…

Hab da mal was programmiert…

Als erstes erstellst du eine neue Windows Anwendung.
In dem Form1 erstellst du drei Textfelder.

  • TextBox1 ist für die Quelldatei
  • TextBox2 ist für die Ausschlussdatei
  • TextBox3 ist für die Zieldatei
    Dann erstellst du neben jeder TextBox jeweils einen Button.
  • Button1 zum öffnen der Quelldatei
  • Button2 zum öffnen der Ausschlussdatei
  • Button3 zum öffnen der Zieldatei
    Danach erstellst du direkt drunter noch einen großen Button.
  • Button4 zum starten des Prozesses
    Als nächstes erstellst du unter dem großen Button noch einen Progressbalken.
  • ProgressBar1 zum anzeigen des aktuellen Fortschritts des Prozesses
    Zum Schluss brauchst du den OpenFileDialog und SaveFileDialog. Diese ziehst du ebenso in das Form und erscheinen dann am unteren Rand des Projekts.
  • OpenFileDialog1 zum öffnen von Dateien
  • SaveFileDialog1 zum speichern von Dateien

Wenn du alles in deinem Form drin hast, klickst du doppelt irgendwas an (z.B. doppelt klicken auf einen der Button).

Es erscheint der Texteditor mit ein bisschen Code drin.
Lösche alles raus und füge den nachfolgenden Code hinein.
Danach musst du noch die Dateien vorbereiten. Das steht aber unterhalb von dem beigefügten Code.

Imports System.IO

Public Class Form1

 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 ' ----- Quelldatei öffnen -----
 With OpenFileDialog1
 .Title = "Quelldatei öffnen"
 .Filter = "Alle Dateiei (\*.\*)|\*.\*"
 .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
 .Multiselect = False
 .FileName = ""
 .ShowDialog()
 If .FileName "" Then TextBox1.Text = .FileName
 End With
 End Sub

 Private Sub Button2\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 ' ----- Ausschlussdatei öffnen -----
 With OpenFileDialog1
 .Title = "Ausschlussdatei öffnen"
 .Filter = "Alle Dateiei (\*.\*)|\*.\*"
 .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
 .Multiselect = False
 .FileName = ""
 .ShowDialog()
 If .FileName "" Then TextBox2.Text = .FileName
 End With
 End Sub

 Private Sub Button3\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
 ' ----- Zieldatei speichern -----
 With SaveFileDialog1
 .Title = "Zieldatei speichern"
 .Filter = "Alle Dateiei (\*.\*)|\*.\*"
 .InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments
 .FileName = ""
 .ShowDialog()
 If .FileName "" Then TextBox3.Text = .FileName
 End With
 End Sub

 Private Sub Button4\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
 ' ----- Datei auslesen, vergleichen und abspeichern -----
 ' -------------------------------------------------------

 ' ----- Vorbereitungen -----
 ' Hier werden Variablen für die nachstehende Verarbeitung festgelegt.
 ' Danach wird das Hautfenster des Programms disabled und noch einmal aktualisiert.
 ' Der Progressbalken wird auf 0 gesetzt falls zuvor bereits eine Verarbeitung stattfand.
 Dim Ausschlussdatei\_Dateiinhalt As String = ""
 Dim Quelldatei\_ZeilenweiserDateiinhalt As String = ""
 Dim Quelldatei\_Dateigroesse As Integer = FileLen(TextBox1.Text)
 Dim FileStreamR As StreamReader
 Dim FileStreamW As StreamWriter
 Dim Zaehler\_DatensaetzeAlle As Integer = 0
 Dim Zaehler\_DatensaetzeOK As Integer = 0
 Dim Zaehler\_DatensaetzeNOK As Integer = 0
 Dim InfoText As String = ""
 Me.Enabled = False
 Me.Refresh()
 ProgressBar1.Value = 0

 ' ----- Ausschlussdatei auslesen und in einer Variable zwischenspeichern -----
 ' Hier wird der StreamReader mit der Ausschlussdatei initialisiert.
 ' Anschließend wird der gesamte Dateiinhalt in die entsprechende Variable gelesen.
 ' Danach wird der StreamReader wieder geschlossen.
 FileStreamR = New StreamReader(TextBox2.Text)
 Ausschlussdatei\_Dateiinhalt = FileStreamR.ReadToEnd
 FileStreamR.Close()

 ' ----- Quelldatei zeilenweise auslesen und mit der Ausschluss-Variable vergleichen -----
 ' Hier werden der StreamReader und StreamWriter mit den jeweiligen Dateien initialisiert.
 ' Danach wird solange die Quelldatei zeilenweise gelesen, bis PEEK kein Zeichen mehr zurückgibt.
 ' In der zwischenzeit wird der Progressbalken immer wieder aktualisiert und die jeweils gelesene
 ' Zeile in die entsprechende Variable gespeichert.
 ' Die Variable wird mit dem Inhalt der Ausschlussdatei verglichen und entsprechend wird die
 ' Zeile ignoriert oder in die vorgesehene Zieldatei gespeichert.
 ' Zählervariablen geben im Abschluss die Anzahl der verarbeiteten Datensätze zurück.
 ' Danach werden der StreamReader und der StreamWriter wieder geschlossen.
 FileStreamR = New StreamReader(TextBox1.Text)
 FileStreamW = New StreamWriter(TextBox3.Text)
 While FileStreamR.Peek() \> -1
 ProgressBar1.Value = (99 / Quelldatei\_Dateigroesse) \* FileStreamR.BaseStream.Position
 Quelldatei\_ZeilenweiserDateiinhalt = FileStreamR.ReadLine
 Zaehler\_DatensaetzeAlle += 1
 If InStr(Ausschlussdatei\_Dateiinhalt, Quelldatei\_ZeilenweiserDateiinhalt) = 0 Then
 Zaehler\_DatensaetzeOK += 1
 FileStreamW.WriteLine(Quelldatei\_ZeilenweiserDateiinhalt)
 Else
 Zaehler\_DatensaetzeNOK += 1
 End If
 End While
 FileStreamR.Close()
 FileStreamW.Close()

 ' ----- Abschluss -----
 ' Hier wird das Hauptfenster wieder enabled und der Text für die anschließende
 ' Messagebox vorbereitet.
 ' Danach wird der Text am Bildschirm angezeigt.
 Me.Enabled = True
 InfoText = "Prozess abgeschlossen" & vbCrLf & vbCrLf
 InfoText &= "Datensätze gesamt: " & CStr(Zaehler\_DatensaetzeAlle) & vbCrLf
 InfoText &= "Datensätze gespeichert: " & CStr(Zaehler\_DatensaetzeOK) & vbCrLf
 InfoText &= "Datensätze gelöscht: " & CStr(Zaehler\_DatensaetzeNOK)
 MsgBox(InfoText, MsgBoxStyle.Information)
 End Sub
End Class

Also in der Quelldatei habe ich die folgenden beiden Zeilen hergenommen und immer wieder kopiert bis ich irgendwann mal ca. 67.000 Datensätze zusammen hatte.

INSERT INTO gameobject_spawns VALUES (‚99863‘, ‚300147‘, ‚0‘, ‚1‘, ‚1‘, ‚-43.4367‘, ‚-923.198‘, ‚55.8714‘, ‚5.75401‘, ‚0‘, ‚0‘, ‚0.261511‘, ‚-0.965201‘, ‚25‘, ‚0‘, ‚1‘);
INSERT INTO gameobject_spawns VALUES (‚30054‘, ‚2030‘, ‚0‘, ‚1‘, ‚1‘, ‚758.712‘, ‚-1467.83‘, ‚78.6684‘, ‚1.4399‘, ‚0‘, ‚0‘, ‚0.659346‘, ‚0.75184‘, ‚7200‘, ‚100‘, ‚1‘);

Für die Ausschlussdatei habe ich die folgenden Zeilen genommen. Wobei die erste Zeile ca. 100 mal in der Datei stand und die zweite Zeile nur einmal mitten in der Datei zu finden war. Quasi um zu testen ob der Datensatz mitten in der Datei auch zu finden ist. Die restlichen 100 Datensätze sind nur pseudo…

INSERT INTO gameobject_spawns VALUES (‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘, ‚0‘);
INSERT INTO gameobject_spawns VALUES (‚99863‘, ‚300147‘, ‚0‘, ‚1‘, ‚1‘, ‚-43.4367‘, ‚-923.198‘, ‚55.8714‘, ‚5.75401‘, ‚0‘, ‚0‘, ‚0.261511‘, ‚-0.965201‘, ‚25‘, ‚0‘, ‚1‘);

Die Zieldatei erstellt das Programm sowieso selbst. Die brauchst du nicht vorbereiten…

So zum Programm selbst. Wenn du das Programm startest, bekommst du das Fenster mit den Textboxen und den Button angezeigt.
Wenn du nun auf jeweils einen der Button neben den Textboxen klickst, erscheint der Öffnen-Dialog um jeweils die Quell- und Ausschlussdatei zu öffnen. Der dritte Button ist für die Zieldatei. Diese braucht aber nicht vorhanden sein da es der Speicher-Dialog ist und das Programm eh die Datei neu erstellt. Achte aber darauf die in den drei Textboxen die genaue Pfadangabe und Dateiname vorhanden ist.
Zum Schluss dann nur noch auf den großen Button klicken und abwarten bis eine Textmeldung erscheint…

MfG,
Thomas

PS: Von den Test-Dateien immer Sicherheitskopien anlegen um ggf. diese Dateien wieder austauschen zu können. Bitte keine anderen Dateien außer den Test-Dateien benutzen. Andere Dateien können durch das Programm beschädigt werden und sind anschließend ggf. nicht mehr brauchbar…

1 Like

Hi,

die Textfelder haben lediglich einen optischen Grund… Theoretisch wäre es auch ohne Textfelder gegangen aber es soll ja nur ein Beispielprojekt sein und kein selbstständig funktionierendes Tool das ohne jeglichem Zutun seine Aufgabe erledigt.

„Open“ gibt’s in VB.net nicht mehr… :smile:

Die Quelldatei wird zeilenweise eingelesen. Nur die Datei mit den Ausschlussdaten wird vollständig in den Speicher geladen. Grund ist, das ich nicht jeden Datensatz der Quelldatei mit jedem Ausschlussdatensatz vergleichen muss. Ich lesen quasi nur einen Datensatz ein und frage lediglich ab ob dieser Datensatz innerhalb der Ausschlussdaten vorhanden ist. Eine Position oder sonst irgendwas interessiert mich in dem Moment nicht. Wichtig ist nur die Auswertung von INSTR() im Sinne von „Da steht nix drin (0)“ oder „Da ist was drin (>0)“.
Auf diese weise bin ich flexibler und nicht zwangsweise an nur einem Ausschlussdatensatz gebunden.

Die Ausgabe erfolg ebenso nicht in Textboxen sondern direkt in die Dateien hinein.

Ich habe vor langer Zeit schon Verschlüsselungen programmiert die mehrere GB Daten verschlüsseln konnten. Da ist der Arbeitsspeicher nur mit einer einzigen Datei vollgestopft worden. Grad noch so das Windows „stabil“ arbeiten konnte… :smile:

MfG,
Thomas

Hallo,

bitte entschuldigen Sie, aber mein „Expertenwissen“ rührt aus der Zeit meines Studiums - ebenso wie der Account bei wer-weiss-was.de

Ich hoffe, sie bekommen ihre Anfrage dennoch beantwortet.

Freundliche Grüße,
Robert A.

Vielen vielen dank das hat mir sehr geholfen den rest schaffe ich schon allein vielen vielen dank :smile:

) Bitte bitte… Nichts zu danken… :smile:

1 Like

Hallo Wofsauge,

in der Annahme das jede Deiner Zeilen auch eine Zeile in der Datei ist würde ich die Datei mittels

Line input#

Zeile für Zeile einlesen und in eine Listbox packen und auf Textboxen verzichten.

also in etwa so:

dim ff as integer
ff = freefile
open "Deine Datei" for input as #ff
do while not eof(ff)
Line input #ff, tmp
listbox1.additem tmp
loop
close #ff

des weiteren solltest du in dem Listboxevent

Private Sub ListBox1\_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

den code zum verschieben in eine 2. Listbox packen oder in dem Event

Private Sub ListBox1\_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

auf den tastendruck [entf] reagieren (Keycode 46 glaub ich)
So das Beispielsweise durch drücken der Entfernen-Taste die betreffende Zeile gelöscht wird oder durch doppelklick in ein zweites Listbox-Objekt verschoben.
Danach baust Du Dir noch ein Commandbutton ein, um den restliche Text wieder in eine Datei zu schreiben.

ich hoffe ich konnte Dir etwas weiterhelfen!

lg Enrico