Teile aus TXT File kopieren ==> kleine Frage noch!

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

Teile aus TXT File kopieren ==> kleine Frage noch!

Beitrag von Zero_Cool »

Hallo Zusammen

Leider bin ich noch nicht ein erfahrener User im Umgang mit Pure Basic, habe daher eine kleine Frage und hoffe das Ihr mir helfen könnt.

Ich würde gerne eine Kommandozeilenerweiterung schreiben, mit der es möglich ist gewisse Inhalte eines TXT Files zu kopieren und in ein weiteres TXT einzufügen. Soll heissen, ein TXT File beinhaltet in mehreren Zeilen das Wort "xyz", mein Programm sollte nun alle Zeilen erkennen in denen "xyz" steht, und diese Zeite in ein weiteres TXT File kopieren. Ist dies schwer machbar? Dank und Gruss Phil
Zuletzt geändert von Zero_Cool am 22.12.2005 00:21, insgesamt 2-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Kommandozeilen - Automatisch Teile aus TXT File kopieren

Beitrag von Kiffi »

> Ist dies schwer machbar?

nöh, ist relativ einfach. Nachfolgender Code sollte das bewerkstelligen
können (ungeprüft):

Code: Alles auswählen

QuellDatei$ = "c:\blabla.txt"
ZielDatei$ = "c:\blublu.txt"
GesuchteZeichenfolge$ = "xyz"

FF_Quelle = ReadFile(#PB_Any,QuellDatei$)

If FF_Quelle
  
  FF_Ziel = CreateFile(#PB_Any,ZielDatei$)
  
  If FF_Ziel
    
    While Eof(FF_Quelle) = 0
      
      GeleseneZeile$=ReadString()
      
      If FindString(GeleseneZeile$, GesuchteZeichenfolge$, 1)
        
        UseFile(FF_Ziel)
        
        WriteStringN(GeleseneZeile$)
        
        UseFile(FF_Quelle)
        
      EndIf
      
    Wend
    
    CloseFile(FF_Ziel)
    
  Else
    
    ; Ausgabe: Zieldatei konnte nicht erstellt werden
    
  EndIf

  CloseFile(FF_Quelle)
  
Else
  
  ; Ausgabe: Quelldatei konnte nicht geöffnet werden
  
EndIf
Grüße ... Kiffi
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 »

Peter Du bist zu schnell :(

geprüft, fast dasselbe :mrgreen:

Code: Alles auswählen

File1 = ReadFile(#PB_Any, "xyz.txt")
If File1
  File2 = CreateFile(#PB_Any, "abc.txt")
  If File2
    While Eof(File1) = #False
      UseFile(File1)
      Text$ = ReadString()
      If FindString(Text$, "xyz", 1)
        UseFile(File2)
        WriteStringN(Text$)
      EndIf
    Wend
    CloseFile(File1)
    CloseFile(File2)
  EndIf
EndIf
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 »

Danke für die schnelle Hilfe. Habe das Programm kopiert, die txt Dateien erstellt, und eine exe kompiliert. In der Blabla.txt habe ich mehrere Zeilen mit "xyz" eingefügt, wenn ich jedoch das Programm laufen lasse, passiert in der zweiten Datei nicht's. Das Programm beendet sich auch nicht. Was ich was vergessen zu beachten?

EDIT: Habe nix gesagt, war ein kleiner Fehler meinerseits! Wow, das ging sehr schnell! Vielen Dank für die Hilfe! Funktioniert wunderbar?

Eine kleine Frage noch, kann ich irgendwie definieren das er nur gewisse Teile der Zeile Kopiert. Zum Beispiel, soll er alle Zeilen mit xyz kopieren, die Zeichen xyz im zweiten Dokument jedoch weg lassen?
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 »

>> Was ich was vergessen zu beachten?
Glaskugel kaputt :(
Hab den Source getestet, und xyz wurde in Zeile 9 gefunden :lol:
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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Zum Beispiel, soll er alle Zeilen mit xyz kopieren, die Zeichen xyz im
> zweiten Dokument jedoch weg lassen?

ja, dafür gibt's ReplaceString() oder aber Mid().

Code: Alles auswählen

myString$="abcdef"
myString$=ReplaceString(myString$, "abc", "")
Debug myString$
oder

Code: Alles auswählen

myString$="abcdef"
myString$= Mid(myString$, 4, Len(myString$)-3)
Debug myString$
alles weitere zu diesen Befehlen in der Hilfe.

Grüße ... Kiffi
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Wunderbar! Danke! Ihr habt mir beide super geholfen! Danke! Jetzt klappts wunderbar! Schöner Abend!
Benutzeravatar
stbi
Beiträge: 685
Registriert: 31.08.2004 15:39
Wohnort: Cleverly Hills

Beitrag von stbi »

Code: Alles auswählen

type blabla.txt |find "xyz" > xyz.txt
PB 4.02 XP Pro SP2 "Der Code ist willig, aber der Prozessor ist schwach."

Es gibt keine Vista-Witze. Es ist alles wahr!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

stbi hat geschrieben:

Code: Alles auswählen

type blabla.txt |find "xyz" > xyz.txt
danke für den Hinweis. Wusste ich noch nicht, dass das auch so funktioniert.
Aber ich denke, dass diese Funktionalität nur ein Teil dessen ist, was
Zero_Cool letztendlich machen möchte.

Grüße ... Kiffi
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Ich versuche Seit 2 Stunden folgenden Code abzuändern.
File1 = ReadFile(#PB_Any, "xyz.txt")
If File1
File2 = CreateFile(#PB_Any, "abc.txt")
If File2
While Eof(File1) = #False
UseFile(File1)
Text$ = ReadString()
If FindString(Text$, "xyz", 1)
UseFile(File2)
WriteStringN(Text$)
EndIf
Wend
CloseFile(File1)
CloseFile(File2)
EndIf
EndIf
Wie kann ich den Code so abändern, das genau das umgekehrte passiert? Alle Zeilen die das Wort "XYZ" NICHT beinhalten werden in die neue Datei geschrieben?

Könnte mir jemand einen kleinen Tipp geben?
Zuletzt geändert von Zero_Cool am 22.12.2005 00:33, insgesamt 3-mal geändert.
Antworten