Problem Remove String & Wort in 2 Dateien vergleichen
Problem Remove String & Wort in 2 Dateien vergleichen
Hallo Zusammen
Arbeite gerade an meinem ersten Programm, jedoch stellen sich mit noch einige Probleme in den Weg.
Problem 1: Zeile automatisch verkürzen
Leider schaffe ich es nicht den Befehl Remove String korrekt zu gebrauchen. Ich habe in einer grossen TXT Datei verschiedene Zeilen mit dem Inhalt "xyz". Nun würde ich gerne alle Zeilen die dieses Wort NICHT beinhalten, in eine neue TXT Datei kopieren?
Wie muss der Remove String Befehl genau heissen damit ich danach aus einer Zeile "xyz123" den Teil "123" rauslöschen kann?
Gibt es eine Möglichkeit die ersten 20 Zeichen jeder Zeile automatisch zu löschen?
Problem 2: Wort vergleich zweier TXT Dateien
Ich würde gerne ein Wort ( z.B: xyz ) welches auf Zeile 1 in einem TXT File gespeichert ist mit dem Inhalt einer zweiten TXT Datei vergleichen. Ist das Wort in der zweiten Datei vorhanden ( egal welche Zeile ) wird das Wort in eine drtitte TXT Datei kopiert mit dem Text Zusatz "xyz in File 2 gefunden". Danach sollte es mit dem Wort auf Zeile 2 ( z.B: aaa ) der ersten TXT Datei weiter gehen. Wenn in File 2 "aaa" wieder vorhanden ist, wird das Wort wieder in die dritte Datei kopiert, mit dem Zusatz "aaa in File 2 gefunden". Sollte das Wort in der zweiten Datei nicht gefunden worden sein, sollte es mit dem Textzusatz "aaa nicht in File 2 gefunden" in die dritte TXT kopiert werden. Wichtig ist noch, das die dritte TXT Datei jeweils nicht ersetzt wird, sondern immer um eine Zeile ergänzt wird.
Dank für die Hilfe!!! Gruss Phil
Arbeite gerade an meinem ersten Programm, jedoch stellen sich mit noch einige Probleme in den Weg.
Problem 1: Zeile automatisch verkürzen
Leider schaffe ich es nicht den Befehl Remove String korrekt zu gebrauchen. Ich habe in einer grossen TXT Datei verschiedene Zeilen mit dem Inhalt "xyz". Nun würde ich gerne alle Zeilen die dieses Wort NICHT beinhalten, in eine neue TXT Datei kopieren?
Wie muss der Remove String Befehl genau heissen damit ich danach aus einer Zeile "xyz123" den Teil "123" rauslöschen kann?
Gibt es eine Möglichkeit die ersten 20 Zeichen jeder Zeile automatisch zu löschen?
Problem 2: Wort vergleich zweier TXT Dateien
Ich würde gerne ein Wort ( z.B: xyz ) welches auf Zeile 1 in einem TXT File gespeichert ist mit dem Inhalt einer zweiten TXT Datei vergleichen. Ist das Wort in der zweiten Datei vorhanden ( egal welche Zeile ) wird das Wort in eine drtitte TXT Datei kopiert mit dem Text Zusatz "xyz in File 2 gefunden". Danach sollte es mit dem Wort auf Zeile 2 ( z.B: aaa ) der ersten TXT Datei weiter gehen. Wenn in File 2 "aaa" wieder vorhanden ist, wird das Wort wieder in die dritte Datei kopiert, mit dem Zusatz "aaa in File 2 gefunden". Sollte das Wort in der zweiten Datei nicht gefunden worden sein, sollte es mit dem Textzusatz "aaa nicht in File 2 gefunden" in die dritte TXT kopiert werden. Wichtig ist noch, das die dritte TXT Datei jeweils nicht ersetzt wird, sondern immer um eine Zeile ergänzt wird.
Dank für die Hilfe!!! Gruss Phil
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Code: Alles auswählen
; 1: Remove "123"
Text$ = "xyz123"
Text$ = RemoveString(Text$, "123")
Debug Text$
;2: Remove erste 20 Zeichen
Text$ = "12345678901234567890PureBasic Rulez"
Text$ = Right(Text$, Len(Text$) - 20)
Debug Text$
alleine schaffen, ansonsten Hilfe lesen, Beispiele anschauen, usw.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Ja und nein. Nicht ganz. Ich habe 3 Dateien. In der ersten Datei sind 10 Zeilen mit Wörtern gespeichert. In der Zweiten auch, nur das die Wörter in der zweiten Datei nicht in der gleichen Reihenfolge sind. Nun würde ich gerne im ersten File Zeile für Zeile ( Wort für Wort ) auslesen und dan Testen ob es IRGENDWO in der zweiten Datei vorkommt. Kommt das Wort in Datei 2 vor, wird das aktuelle Wort in eine dritte Datei geschrieben. Jedoch sollte das Wort welches in der dritten Datei gespeichert wird, noch den Textzusatz "Wort in File 2 gefunden" erhalten. Ist das WOrt in Datei zwei nicht vorhanden wird es auch in File 3 geschrieben aber mit dem Zusatz "Nicht gefunden".
Auf gut Deutsch: File 1 wird Wort für Wort ausgelesen und mit dem GESAMMTEN Inhalt der zweiten Datei verglichen. Ist in der zweiten Datei das Wort vorhanden, wird das Wort mit dem Textzusatz "gefunden" in die 3. Datei gespeichert. Wird das Wort in File 2 nicht gefunden wird es ebenfalls in Datei 3 gepeichert, jedoch mit dem Zusatz "nicht gefunden"
Auf gut Deutsch: File 1 wird Wort für Wort ausgelesen und mit dem GESAMMTEN Inhalt der zweiten Datei verglichen. Ist in der zweiten Datei das Wort vorhanden, wird das Wort mit dem Textzusatz "gefunden" in die 3. Datei gespeichert. Wird das Wort in File 2 nicht gefunden wird es ebenfalls in Datei 3 gepeichert, jedoch mit dem Zusatz "nicht gefunden"
Dann arbeitest du am besten mit FindString()
Für jedes Wort der ersten Datei suchst du in jeder Zeile der anderen Datei das Wort.
Nachdem du es gefunden (oder nicht gefunden) hast schreibst du es dann in die 3. Datei.
Der Code geht jetzt davon aus, dass in der ersten Datei nur ein Wort pro Zeile steht. Wenn dass nicht so ist müsstest du dir noch StringField() in der Hilfe ansehen.
Für jedes Wort der ersten Datei suchst du in jeder Zeile der anderen Datei das Wort.
Nachdem du es gefunden (oder nicht gefunden) hast schreibst du es dann in die 3. Datei.
Code: Alles auswählen
ReadFile (1, "Datei_1.txt")
ReadFile (2, "Datei_2.txt")
CreateFile(3, "Datei_3.txt")
Repeat
UseFile(1)
Wort$ = ReadString()
UseFile(2)
Repeat
If FindString(ReadString(), Wort$, 0)
Gefunden = 1
EndIf
Until Eof(2) Or Gefunden
FileSeek(0)
UseFile(3)
If Gefunden
WriteString(Wort$ + " gefunden")
Else
WriteString(Wort$ + "nicht gefunden")
EndIf
Until Eof(1)
hier nochmal der Vollständigkeit halber eine Lösung mit anderem Ansatz.
Da ich kein grosser Freund von UseFile() bin, lese ich Datei1 und Datei2
komplett in LinkedLists ein:
Grüße ... Kiffi
Da ich kein grosser Freund von UseFile() bin, lese ich Datei1 und Datei2
komplett in LinkedLists ein:
Code: Alles auswählen
NewList ZeilenInDatei1.s()
NewList ZeilenInDatei2.s()
NewList ZeilenInDatei3.s()
; Datei 1 einlesen
FF = ReadFile(#PB_Any, "c:\Datei1.txt")
If FF
While Eof(FF)=0
Zeile$=ReadString()
If Zeile$ <> ""
AddElement(ZeilenInDatei1())
ZeilenInDatei1()=Zeile$
EndIf
Wend
CloseFile(FF)
Else
; Ausgabe: Kann Datei1 nicht lesen
End
EndIf
If CountList(ZeilenInDatei1())=0
; Ausgabe: Datei1 enthält keine Wörter
End
EndIf
; Datei 2 einlesen
FF = ReadFile(#PB_Any, "c:\Datei2.txt")
If FF
While Eof(FF)=0
Zeile$=ReadString()
If Zeile$ <> ""
AddElement(ZeilenInDatei2())
ZeilenInDatei2()=Zeile$
EndIf
Wend
CloseFile(FF)
Else
; Ausgabe: Kann Datei2 nicht lesen
End
EndIf
If CountList(ZeilenInDatei2())=0
; Ausgabe: Datei2 enthält keine Wörter
End
EndIf
; Vergleichen
ForEach ZeilenInDatei1()
ForEach ZeilenInDatei2()
If ZeilenInDatei1()=ZeilenInDatei2()
AddElement(ZeilenInDatei3())
ZeilenInDatei3()=ZeilenInDatei1()
EndIf
Next
Next
If CountList(ZeilenInDatei3())=0
; Ausgabe: Keine Übereinstimmung der Wörter in Datei1 und Datei2
End
EndIf
; Datei 3 schreiben
FF = CreateFile(#PB_Any, "c:\Datei3.txt")
If FF
ForEach ZeilenInDatei3()
WriteStringN(ZeilenInDatei3() + " in Datei2 gefunden")
Next
CloseFile(FF)
Else
; Ausgabe: Kann Datei3 nicht schreiben
End
EndIf