Seite 1 von 1

Problem Remove String & Wort in 2 Dateien vergleichen

Verfasst: 21.12.2005 02:28
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

Verfasst: 21.12.2005 09:41
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.

Verfasst: 21.12.2005 13:32
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...

Verfasst: 21.12.2005 15:19
von Batze
Was willst du denn vergleichen?
Ob das selbe Wort in beiden Dateien irgendwo auftaucht?

Verfasst: 21.12.2005 21:28
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"

Verfasst: 22.12.2005 13:47
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.

Verfasst: 22.12.2005 14:30
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

Verfasst: 22.12.2005 22:08
von Zero_Cool
Danke für die beiden Beispiele! Werde die Scripts heute noch testen! Dank!