Sample code for 30+ languages & platforms
DataFlex

Implement Preprocessor #include with StringBuilder

Demonstrates how to implement #include with a Chilkat StringBuilder.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoSbSrc
    Boolean iSuccess
    String sFilePath
    Handle hoSbIncludeFile
    String sTemp1
    Boolean bTemp1

    // First build a string that has a preprocessor include
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbSrc
    If (Not(IsComObjectCreated(hoSbSrc))) Begin
        Send CreateComObject of hoSbSrc
    End
    Get ComAppend Of hoSbSrc "1" + (character(13)) + (character(10)) + "2" + (character(13)) + (character(10)) + "3" + (character(13)) + (character(10)) To iSuccess
    Get ComAppend Of hoSbSrc "#include <qa_data/txt/helloWorld.txt>" + (character(13)) + (character(10)) To iSuccess
    Get ComAppend Of hoSbSrc "4" + (character(13)) + (character(10)) + "5" + (character(13)) + (character(10)) To iSuccess

    Get ComGetAsString Of hoSbSrc To sTemp1
    Showln sTemp1

    // sbSrc contains:
    // 	1
    // 	2
    // 	3
    // 	#include <qa_data/txt/helloWorld.txt>
    // 	4
    // 	5

    // The qa_data/txt/helloWorld.txt file contains "Hello World!"

    Get ComGetAfterBetween Of hoSbSrc "#include" "<" ">" To sFilePath
    Get ComLastMethodSuccess Of hoSbSrc To bTemp1
    If (bTemp1 <> True) Begin
        Showln "No #include's found."
        Procedure_Return
    End

    Showln "filePath: " sFilePath

    // Load the contents of the filePath
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbIncludeFile
    If (Not(IsComObjectCreated(hoSbIncludeFile))) Begin
        Send CreateComObject of hoSbIncludeFile
    End
    Get ComLoadFile Of hoSbIncludeFile sFilePath "utf-8" To iSuccess

    // Replace the first occurrence of #include <...> line with the contents of the include file.
    Get ComGetAsString Of hoSbIncludeFile To sTemp1
    Get ComReplaceAllBetween Of hoSbSrc "#include" ">" sTemp1 True To iSuccess

    Get ComGetAsString Of hoSbSrc To sTemp1
    Showln sTemp1

    // sbSrce now contains:
    // 	1
    // 	2
    // 	3
    // 	Hello World!
    // 	4
    // 	5


End_Procedure