Programm soll Text-Dateien aufsplitten

summon

Grünschnabel
Hallo,

ich versuche ein Programm zu schreiben, das eine bestimmte Text-Datei öffnet und deren Inhalt auf mehrere neu erzeugte Einzeldateien aufteilt. Die Namen der neu erzeugten Dateien sollen aus der ursprünglichen Textdatei ausgelesen werden.
Diese hat ein ganz bestimmtes Muster:
Code:
BEGIN:VCARD                            <- Hier fängt der erste Block an
VERSION:2.1
N:Blockname1                      <- Name der neuen Datei für diesen Block
TEL;CELL:Tel-Nummer
X-IRMC-LUID:000200000049
END:VCARD                               <- Ende des Blocks
BEGIN:VCARD                                     <- Nächster Block
VERSION:2.1
N: Blockname2
.... usw.
Ich habe leider keine Ahnung, wie ich das hinbekomme, dass mein Programm bei jedem "BEGIN" eine neue Datei mit dem unter "N: ..." angegebenen Namen anlegt und den Inhalt des Blocks darin speichert.

Könnt ihr mir weiterhelfen? Ist doch eigentlich eine einfache Aufgabe, nur hab ich von Dateioperationen nicht so viel Ahnung.

Danke schonmal
 
Am einfachsten geht das ganze mit regulären Ausdrücken. Da kannst du einen finden, der auf BEGIN:VCARD ... END passt. Dann matchst du das einfach und schreibst jeden Match in eine eigene Datei.

Die andere Möglichkeit:
  1. Zeilenweise einlesen
  2. Wenn die Zeile mit BEGIN beginnt, dann neue Datei anfangen.
  3. Wenn die Zeile mit END beginnt, Datei abschliessen
  4. Alles dazwischen in die Datei schreiben.
 
Hallo,

danke für die Antwort, so in der Art hab ich mir das auch vorgestellt.
Mittlerweile hab ich das auch einigermaßen hinbekommen, nur hab ich noch ein Problem mit den Dateinamen.
Wie bekomme ich es hin, dass bei jedem Durchlauf eine neue Datei mit dem Namen "neueDateiZAHL" (Zahl von 1 bis x) erzeugt wird?
Ich habe es bis jetzt mit einem 2-Dimensionalen Char-Array gelöst:

Code:
char dateinamen[30][15] = { "neueDatei1.vcf", "neueDatei2.vcf", .... };

Das war aber nur zum Testen, ob der Rest funktioniert - so kann das auf keinen Fall bleiben, vor allem weil die maximale Zahl der eingelesenen Blöcke dann schon begrenzt ist...


Edit: Hat sich geklärt, die Bibliotheksfunktion "itoa" hat die Lösung gebracht!
 
Zuletzt bearbeitet:
Zurück