Problem Remove String & Wort in 2 Dateien vergleichen

Anfängerfragen zum Programmieren mit PureBasic.
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Problem Remove String & Wort in 2 Dateien vergleichen

Beitrag von Zero_Cool »

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
Benutzeravatar
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

Beitrag von ts-soft »

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$
Anhand Deines Wissens, durch den ersten Beitrag, solltest Du den Rest
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.
Bild
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Hi

Dnake für die Info! Ja das stimmt, habe dn Text$ Wert nicht korrekt angegeben! Den Rest schaffe ich jetzt dank deines Bespiels!

Das vergleichender Inhalte ist ja prinzipiell auch möglich, habe keinen Befehl in der Hilfe für das vergleichen von Wörtern in 2 Dateien gefunden...
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Was willst du denn vergleichen?
Ob das selbe Wort in beiden Dateien irgendwo auftaucht?
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

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"
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

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.

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)
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.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

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:

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
Grüße ... Kiffi
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Danke für die beiden Beispiele! Werde die Scripts heute noch testen! Dank!
Antworten