Dienstag, 29. November 2011

Entfernen von Worten aus Textdateien / Removing words from textfiles

Visual FoxPro stellt uns nicht nur eine Menge Funktionen zur Stringmanipulation zur Verfügung. Auch das Öffnen und Bearbeiten von Dateiinhalten kann auf mehreren Wegen durchgeführt werden.

Wollen wir bspw. bestimmte Worte (oder Zeichenfolgen) aus einer Textdatei entfernen, so können wir die Datei natürlich über die Funktionen FOPEN(), FGETS(), FWRITE() und FCLOSE() verarbeiten, mit Hilfe von FILETOSTR() und STRTOFILE() funktioniert dies jedoch erheblich einfacher.

Über FILETOSTR() lesen wir den Inhalt einer Datei komplett in eine Variable die wir anschliessend gezielt bearbeiten und mit STRTOFILE() wieder auf die Festplatte schreiben können.

Im Blogeintrag zur Manipulation von MP3 ID3v1 Tags arbeite ich ebenfalls mit diesen beiden Funktionen, allerdings wird dort ein kompletter Bereich des Datenstroms verändert.

lcFile = [D:\Temp\test.txt]
lcFileContent = FILETOSTR( lcFile )

* Do something

STRTOFILE( lcFileContent , lcFile )

Zur Verarbeitung des Datenstroms welcher sich nun in der Variablen 'lcFileContent' befindet, stehen uns zwei Funktionen zur Verfügung, von denen die eine ( OCCURS() ) die Häufigkeit des Auftretens der zu entfernenden Zeichenkette aufzeigt und die andere ( STRTRAN() ) den Austausch bzw. das Entfernen vornimmt.

Im nun folgenden Codebeispiel wird zunächst eine Testdatei erzeugt und anschliessend wieder eingelesen, das Auftreten der Zeichenfolge 'Lorem ipsum' geprüft und das zweite Auftreten aus dem Datenstrom entsorgt. Anschliessend wird die Datei aktualisiert.



* // Schritt 1: Demodaten erzeugen
* // Step 1   : Creating demo data
LOCAL    lcFileName as String , lcString as String , lcFileContent as String , ;
        lcSafety as String
lcFileName    = [D:\Temp\test.txt]
lcSafety    = SET( [Safety] )
SET SAFETY OFF 

* // Der Beispieltext enthält insgesamt 4x die Zeichenfolge 'Lorem ipsum'
* // This demo data contains 4x the character string 'Lorem ipsum'
TEXT TO lcString TEXTMERGE NOSHOW PRETEXT 2+4
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
    sed diam nonumy eirmod tempor invidunt ut labore et dolore 
    magna aliquyam erat, sed diam voluptua. At vero eos et 
    accusam et justo duo dolores et ea rebum. Stet clita kasd 
    gubergren, no sea takimata sanctus est Lorem ipsum dolor 
    sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing 
    elitr, sed diam nonumy eirmod tempor invidunt ut labore et 
    dolore magna aliquyam erat, sed diam voluptua. At vero eos 
    et accusam et justo duo dolores et ea rebum. Stet clita 
    kasd gubergren, no sea takimata sanctus est Lorem ipsum 
    dolor sit amet.
ENDTEXT 
STRTOFILE( lcString , lcFileName )

* // Schritt 2: Einlesen der erzeugten Testdatei
* // Step 2   : Reading the created textfile
lcFileContent = FILETOSTR( lcFileName )

* // Schritt 3: Feststellen der Häufigkeit des Auftretens von 'Lorem ipsum'
* // Step 3   : Checking the frequency of occurrence of 'Lorem ipsum'
CLEAR 
? [Lorem ipsum was found ]
?? OCCURS( [Lorem ipsum] , lcFileContent )
?? [ times within the filestream]

* // Schritt 4: Entfernen des zweiten Auftretens von 'Lorem ipsum'
* // Step 4   : Removing the second occurance of 'Lorem ipsum'
lcFileContent = STRTRAN( lcFileContent , [Lorem ipsum] , [] , 2 , 1 )

* // Schritt 5: Aktualisieren der Datei auf der Festplatte
* // Step 5   : Updating the file on harddisk
STRTOFILE( lcFileContent , lcFileName )

SET SAFETY &lcSafety

RELEASE lcFileName , lcString , lcFileContent , lcSafety

Keine Kommentare:

Kommentar veröffentlichen