siso

明天会更好!

利用NVelocity 模版生成文本文件

namespace Common
{
    public class Tools
    {
        public string Process(string content, int startIndex, int length)
        {
            string result = content.Substring(startIndex, length);
            return result;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Commons.Collections;
using System.IO;
using System.Data;
using Common;
using NVelocity.App;
using NVelocity.Runtime;

namespace NVelocity
{  
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt1 = new DataTable();
            dt1.Columns.Add("ID", typeof(string));
            dt1.Columns.Add("Name", typeof(string));
            dt1.Columns.Add("Add", typeof(string));      
            dt1.Rows.Add("001", "小明", "我家住黄土高坡上");
            dt1.Rows.Add("002", "小红", "我住在黄土高坡下");

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("ID", typeof(string));
            dt2.Columns.Add("Name", typeof(string));
            dt2.Columns.Add("Score", typeof(string));         
            dt2.Rows.Add("001", "数学", 11);
            dt2.Rows.Add("001", "语文", 12);
            dt2.Rows.Add("001", "英语", 13);
            dt2.Rows.Add("002", "数学", 21);
            dt2.Rows.Add("002", "语文", 22);
            dt2.Rows.Add("002", "英语", 23);

            Tools tools = new Tools();

            VelocityEngine vltEngine = new VelocityEngine();//模板引擎实例化
            ExtendedProperties ep = new ExtendedProperties();//模板引擎参数实例化
            ep.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");//指定资源的加载类型
            ep.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, "f:\\Template");//指定资源的加载路径   
            ep.AddProperty(RuntimeConstants.INPUT_ENCODING, "gb2312");//输出格式
            ep.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "gb2312");//输出格式
            vltEngine.Init(ep);

            Template template = vltEngine.GetTemplate("Temp.txt");//加载模板
            VelocityContext vltContext = new VelocityContext(); //当前的数据信息载体集合
            vltContext.Put("Table1", dt1);
            vltContext.Put("Table2", dt2);
            vltContext.Put("Tools", tools);

            StringWriter vltWriter = new StringWriter();
            template.Merge(vltContext, vltWriter);

            Console.Write(vltWriter.ToString());

            Console.ReadLine();
        }
    }
}

 

模版:

我是开头

#foreach($user1 in $Table1.Rows)
$user1.Name
$Tools.Process($user1.Add, 0, 7)
#foreach($user2 in $Table2.Rows)
#if($user2.ID == $user1.ID)
$user2.Name $user2.Score
#end
#end

--------------------我是记录分隔符--------------
#end

我是结尾

输出结果:

 

posted on 2014-04-26 15:15  siso  阅读(334)  评论(0编辑  收藏  举报

导航