MODULE MergeText; (* ========================================================================= Merge a set of text files 'SplitLines.*' into one file 'MergeLines.txt' NOTE: Run SplitText first to create the set of files Author : Chris Burrows Created: Aug 2007 (c) 2007-2008 CFB Software http://www.cfbsoftware.com/gpcp ========================================================================= *) IMPORT Sys := "[mscorlib]System", IO := "[mscorlib]System.IO", Txt := "[mscorlib]System.Text", CPmain; (* ==================================================================== *) PROCEDURE MakeFileName(fileRoot: Sys.String; fileCount: INTEGER): Sys.String; VAR extension: Sys.String; BEGIN extension := Sys.Convert.ToString(fileCount); extension := extension.PadLeft(3, '0'); RETURN fileRoot + '.' + extension END MakeFileName; (* ==================================================================== *) PROCEDURE ReadFile(fileName: Sys.String; VAR sb: Txt.StringBuilder); VAR s: Sys.String; sr: IO.StreamReader; BEGIN sr := IO.StreamReader.init(fileName); s := sr.ReadToEnd(); sb := sb.Append(s); sr.Close END ReadFile; (* ==================================================================== *) PROCEDURE MergeFiles(fileRoot, outFile: Sys.String); VAR fileCount: INTEGER; inFile, extension: Sys.String; sb: Txt.StringBuilder; sw: IO.StreamWriter; BEGIN NEW(sb); fileCount := 1; (* outFile := fileRoot.001 + fileRoot.002 + .... *) inFile := MakeFileName(fileRoot, fileCount); WHILE IO.File.Exists(inFile) DO ReadFile(inFile, sb); INC(fileCount); inFile := MakeFileName(fileRoot, fileCount) END; sw := IO.StreamWriter.init(outFile); sw.Write(sb); sw.Close END MergeFiles; (* ==================================================================== *) BEGIN MergeFiles('SplitLines', 'MergeLines.txt') END MergeText.