There's a very useful feature that FoxPro users have had for over 2 decades: being able to output text in any format, with WYSIWYG and the ability to embed expressions (The TEXT…ENDTEXT command)

 

Generating XML, HTML, Bat files, PowerShell Script, etc is a breeze with this command. Free form text between the "TEXT" and "ENDTEXT" commands is allowed, with embedded expressions

 

You can also just copy text from an existing HTML/XML, etc. source file and paste it directly into VB or Fox, modifying it to embed an expression.

 

FoxPro even allows you to change the delimiters (default "<<" and ">>") of embedded expressions with the SET TEXTMERGE DELIMITERS command . Unfortunately, it only allows a max of 2 chars as the delimiters, whereas the VB XML Expression hole requires 3 chars for the left delimiter "<%=".

 

 

You can use the XML features of VB 2008 to create such a raw text file!

 

In VB, to embed a "<" you can use "&lt;" or <%= "<" %>

 

 

Fox code sample:

 

SET TEXTMERGE DELIMITERS TO "<%","%>"

sOutputFile="d:\t.txt"

sScriptFile="d:\t.bat"

ERASE (sOutputFile)

ERASE (sScriptFile)

TEXT TO myvar  TEXTMERGE

rem This is a bat file that does a dir on a path and redirects output to a file

rem the following line is something like "dir <path> >> d:\t.txt"

dir >> <% sOutputFile %>

echo This text goes to the output <%TRANSFORM(DATETIME()) %> <% sOutputFile %>

 

ENDTEXT

STRTOFILE(myvar,sScriptFile)

run cmd /c &sScriptFile

IF FILE(sOutputFile)

      ?FILETOSTR(sOutputFile)

ENDIF

 

 

 

 

VB Code Sample:

 

Module Module1

 

    Sub Main()

        Dim sOutputFile = "d:\t.txt"

        Dim sScriptFile = "d:\t.bat"

        If My.Computer.FileSystem.FileExists(sOutputFile) Then

            My.Computer.FileSystem.DeleteFile(sOutputFile)

        End If

        Dim BatFile = _

<myxml>

rem This is a bat file that does a dir on a path and redirects output to a file

rem the following line is something like "dir &lt;path> >> d:\t.txt"

dir "<%= My.Application.Info.DirectoryPath %>" >> <%= sOutputFile %>

echo This text goes to the output <%= DateTime.Now.ToString %> >> <%= sOutputFile %>

</myxml>

        Console.WriteLine(BatFile.Value)

        My.Computer.FileSystem.WriteAllText(sScriptFile, BatFile.Value, False, Text.Encoding.ASCII)

        Dim proc = System.Diagnostics.Process.Start("cmd", "/c " + sScriptFile)

        proc.WaitForExit()

        Dim sOutputString = ""

        If My.Computer.FileSystem.FileExists(sOutputFile) Then

            sOutputString = My.Computer.FileSystem.ReadAllText(sOutputFile)

        End If

        MsgBox("Proc Done " + sOutputString)

    End Sub

 

End Module

 

 

 

 

 

VB Code output

 

Volume in drive C is Calvinh1C

 Volume Serial Number is A815-FF6E

 

 Directory of C:\Documents and Settings\calvinh\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\bin\Debug

 

10/04/2007  09:40 AM    <DIR>          .

10/04/2007  09:40 AM    <DIR>          ..

10/04/2007  09:40 AM            15,872 ConsoleApplication1.exe

10/04/2007  09:40 AM            40,448 ConsoleApplication1.pdb

10/04/2007  09:39 AM             9,568 ConsoleApplication1.vshost.exe

09/24/2007  08:47 PM               490 ConsoleApplication1.vshost.exe.manifest

10/04/2007  09:40 AM               127 ConsoleApplication1.xml

               5 File(s)         66,505 bytes

               2 Dir(s)  56,774,217,728 bytes free

This text goes to the output 10/4/2007 9:40:18 AM

 

 

 

 

 

See also:

 

Use temporary projects in Visual Studio

LINQ Cookbook, Recipe 8: Querying XML Using LINQ

Start using XML and XSLT to create HTML

Use a simple XSLT to read the RSS feed from a blog

Generating VBScript to read a blog