Textdateien zusammenfassen, wie geht das bitte?

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Textdateien zusammenfassen, wie geht das bitte?

Beitrag von funkheld »

Hallo, guten tag.

Ich habe in einen Ordner Textdateien, manchmal 3 oder auch 5.
Nun möchte ich die Textdateien hintereinander einlesen , damit es eine Textdatei wird.

Wie geht das bitte?
Alle Textdateien im Ordner finden mit der Endung .txt und dann zusammenführen bitte.

Danke.
Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von RSBasic »

In meinem Beispiel werden alle drei Textdateien (es können auch binäre Dateien sein) eingelesen und den Inhalt aller drei Dateien wird in eine zusammengefasste Datei geschrieben:

Code: Alles auswählen

EnableExplicit

Define FileLength
Define *FileMemory

If CreateFile(0, "D:\textfull.txt")
  If ReadFile(1, "D:\text1.txt")
    FileLength = Lof(1)
    *FileMemory = AllocateMemory(FileLength)
    ReadData(1, *FileMemory, FileLength)
    WriteData(0, *FileMemory, FileLength)
    CloseFile(1)
    FreeMemory(*FileMemory)
  EndIf
  If ReadFile(1, "D:\text2.txt")
    FileLength = Lof(1)
    *FileMemory = AllocateMemory(FileLength)
    ReadData(1, *FileMemory, FileLength)
    WriteData(0, *FileMemory, FileLength)
    CloseFile(1)
    FreeMemory(*FileMemory)
  EndIf
  If ReadFile(1, "D:\text3.txt")
    FileLength = Lof(1)
    *FileMemory = AllocateMemory(FileLength)
    ReadData(1, *FileMemory, FileLength)
    WriteData(0, *FileMemory, FileLength)
    CloseFile(1)
    FreeMemory(*FileMemory)
  EndIf
 
  CloseFile(0)
EndIf
\\Edit:
FreeMemory wurde hinzugefügt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von mk-soft »

RSBasic war schneller 8)

hat aber ein Speicherleck... FreeMemory vergessen.

Hatte etwas Langeweile.

Code: Alles auswählen

;-TOP

; -------------------------------------------------------------------

Procedure OpenTextFiles(List Files.s())
  Protected file.s
  
  ClearList(Files())
  file = OpenFileRequester("Textfiles", "", "TXT|*.txt", 0, #PB_Requester_MultiSelection)
  While Bool(file)
    AddElement(Files())
    Files() = file
    file = NextSelectedFileName()
  Wend
  ProcedureReturn ListSize(Files())
EndProcedure

; -------------------------------------------------------------------

Procedure PackTextFiles(List Files.s(), SaveFile.s)
  Protected desc.i, source.i, size, *buffer 
  desc = CreateFile(#PB_Any, SaveFile)
  If desc
    ForEach Files()
      source = ReadFile(#PB_Any, Files())
      If source
        size = Lof(source)
        If size
          *buffer = AllocateMemory(size)
          ReadData(source, *buffer, size)
          WriteData(desc, *buffer, size)
          FreeMemory(*buffer)
        EndIf
        CloseFile(source)
      Else
        Debug "Error: ReadFile " + Files()
      EndIf
    Next
    CloseFile(desc)
  Else
    Debug "Error: CreateFile " + SaveFile
  EndIf
EndProcedure

; -------------------------------------------------------------------

Define NewList files.s()
Define save.s

If OpenTextFiles(files())
  save = SaveFileRequester("Save to", "", "", 0)
  If Bool(save)
    Debug save
    PackTextFiles(files(), save)
  EndIf
EndIf

[/size]
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von RSBasic »

@mk-soft
Dann war ich wohl zu schnell. Sorry, FreeMemory() darf natürlich nicht fehlen. :oops: Habs hinzugefügt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von funkheld »

Danke für die schnelle Hilfe.

Wenn ich einen 2. Datei anklicke und speichere , ist die 1. Datei verschwunden in der sammel.txt
Wie kann man es bitte machen, das die Dateien hier im Progamm immer die Datei dranhängen und nicht die 1. löschen?

Danke.
Gruss
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von Bisonte »

Die Datei, die Du erweitern möchtest, musst du natürlich immer als erstes öffnen.
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von RSBasic »

Was heißt "anklicken"?
Wenn du eine bereits vorhandene Datei mit PB öffnest und du möchtest einen weiteren Text hinzufügen, ohne den vorherigen Inhalt zu überschreiben, kannst du mit FileSeek(Lof(#DeineDatei)) arbeiten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von juergenkulow »

Hallo funkheld,

ich habe mich um die Listen und Proceduren gedrückt:

Code: Alles auswählen

; Mehrere Dateien zu einer Datei zusammenfassen. 
Dateiname.s=OpenFileRequester("Bitte alle Dateien zum Laden auswählen:","",
                              "Text (*.txt)|*.txt|Alle Dateien (*.*)|*.*",0,#PB_Requester_MultiSelection)
ZielDateiname.s=SaveFileRequester("Bitte Datei zum Speichern angeben:","","Text (*.txt)|*.txt|Alle Dateien (*.*)|*.*",0)
If 0=FindString(ZielDateiname,".") : ZielDateiname+".TXT" : EndIf 
If -1<>FileSize(ZielDateiname) : MessageRequester("FATAL",ZielDateiname+" ist bereits vorhanden.") : End : EndIf 
SpeicherDatei=CreateFile(#PB_Any,ZielDateiname)
If 0=SpeicherDatei : MessageRequester("FATAL",ZielDateiname+" konnte nicht erstellt werden.") : End : EndIf 
While Dateiname<>""
  LeseDatei=ReadFile(#PB_Any,Dateiname)
  If 0=LeseDatei : MessageRequester("FATAL",Dateiname+" konnte nicht gelesen werden.") : End :EndIf 
  Laenge=Lof(LeseDatei)
  *p=AllocateMemory(Laenge)
  If Laenge<>ReadData(LeseDatei,*p,Laenge) 
    MessageRequester("INFO",Dateiname+" konnte nicht vollständig gelesen werden.") 
  EndIf 
  CloseFile(LeseDatei)
  If Laenge<>WriteData(SpeicherDatei,*p,Laenge) 
    MessageRequester("FATAL",Dateiname+" konnte nicht vollständig geschrieben werden.")
    End
  EndIf   
  FreeMemory(*p)
  Dateiname = NextSelectedFileName() 
Wend 
CloseFile(SpeicherDatei)
Das Progrämmchen kann man bei Bedarf noch mit einem DeleteFile(Dateiname) ergänzen, nach WirteData.
Gruß

Edit if -1<>FileSize(ZielDateiname) ...
Zuletzt geändert von juergenkulow am 13.10.2018 17:57, insgesamt 1-mal geändert.
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
funkheld
Beiträge: 636
Registriert: 31.12.2009 11:58

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von funkheld »

Danke für eure Hilfe.

Werde ich jetzt mal zusammenführen.

Gruss
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Textdateien zusammenfassen, wie geht das bitte?

Beitrag von juergenkulow »

Hallo,

es geht auch einfach mit der cmd.exe:

Code: Alles auswählen

copy Quelle1.txt+Quelle2.txt+Quelle3.txt Ziel.txt
oder

Code: Alles auswählen

copy Quelle*.txt Ziel.txt
Antworten