Die CompareFiles() vergleicht zwei Dateien zeilenweise, wenn der
Inhalt der älteren in der der neueren Datei komplett enthalten ist.
D.h. es prüft nur auf neue Einträge irgendwo in der Datei, doppelte
werden nur einmal angezeigt und ausgegeben.
Ich brauche das z.B. für das prüfen auf Updates einer Filelist.
Die SearchDoubles() sucht natürlich nach doppelten Einträgen in einer Datei (ebenfalls Zeilenweise) und gibt diese aus.
Vielleicht kann das noch Jemand gebrauchen oder erweitern...
Mfg
Edit : Nun mit Fehlerhandling.
Code: Alles auswählen
Procedure FileLength(filenr,filename$)
If ReadFile(filenr,filename$)
While Eof(filenr)=0
ReadString()
filelen+1
Wend
CloseFile(filenr)
Else
ErrorMessage("Read",filename$)
EndIf
ProcedureReturn filelen
EndProcedure
Procedure CompareFiles(filenr_old,filename_old$,filenr_new,filename_new$,filenr_out,filename_out$)
filelen_old=FileLength(filenr_old,filename_old$)
filelen_new=FileLength(filenr_new,filename_new$)
Dim File_old.s(filelen_old-1)
If ReadFile(filenr_old,filename_old$)
counter=0
While Eof(filenr_old)=0
input_old$=Trim(ReadString())
File_old(counter)=input_old$
counter+1
Wend
CloseFile(filenr_old)
Else
ErrorMessage("Read",filename_old$)
EndIf
Dim File_new.s(filelen_new-1)
If ReadFile(filenr_new,filename_new$)
counter=0
While Eof(filenr_new)=0
input_new$=Trim(ReadString())
File_new(counter)=input_new$
counter+1
Wend
CloseFile(filenr_new)
Else
ErrorMessage("Read",filename_new$)
EndIf
If CreateFile(filenr_out,filename_out$)
counter=0
i=0
While i < filelen_new
a$=File_new(i)
k=0
While k < filelen_old
b$=File_old(k)
If a$=b$
counter=1
k+1
Break
EndIf
k+1
Wend
If counter=0
WriteStringN(a$)
EndIf
counter=0
i+1
Wend
CloseFile(filenr_out)
Else
ErrorMessage("Create",filename_out$)
EndIf
EndProcedure
Procedure SearchDoubles(filenr,filename$,filenr_out,filename_out$)
filelen=FileLength(filenr,filename$)
Dim File.s(filelen-1)
If ReadFile(filenr,filename$)
counter=0
While Eof(filenr)=0
input$=Trim(ReadString())
File(counter)=input$
counter+1
Wend
CloseFile(filenr)
Else
ErrorMessage("Read",filename$)
EndIf
If CreateFile(filenr_out,filename_out$)
counter=0
i=0
While i < filelen
a$=File(i)
k=0
While k < filelen
b$=File(k)
If a$=b$
counter+1
EndIf
k+1
Wend
If counter>1
WriteStringN(a$)
EndIf
counter=0
i+1
Wend
CloseFile(filenr_out)
Else
ErrorMessage("Create",filename_out$)
EndIf
EndProcedure
Procedure ErrorMessage(error_type$,error_filename$)
MessageRequester("ERROR","Could Not "+error_type$+" File : "+error_filename$ ,0)
EndProcedure