jtahstu的博客

root@jtahstu.com   Github   英文博客  

最新碎语:以后没事写写小的知识点吧

您的位置:jtahstu的博客 >笔记> 基于C#实现博客自动生成静态网页

基于C#实现博客自动生成静态网页

程序基本思路:
本程序由一个模板文件和一个输入文件组成,模板文件含特定代码,所以在程序运行时可以精确地找到插入替换位置,然后读取输入文件,拿到特定的段落,替换之。
思路就是这个样子,应该不是很复杂。目前就是写出来然后节省一部分代码量,该程序还有许多限制,也就在我电脑上跑跑了。
本文就是这个程序跑出来的,然后修改了部分错误,大家感受一下。
此乃初稿,即第一天完成时的代码,后续有所改动和扩展。


Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace 博客笔记自动生成 {
    class Program {
        #region 写入标题,时间,简介
        static void r_and_w_title(string file) {
            var utf8WithBom = new System.Text.UTF8Encoding(true);
            StreamReader reader = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\biji_Template.html", utf8WithBom);
            String a = reader.ReadToEnd();
            StreamReader reader_input = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\input.txt", utf8WithBom);
            string input = reader_input.ReadToEnd();
            reader.Close();
            reader_input.Close();

            //替换标题
            int start = input.IndexOf("~t");
            int end = input.IndexOf("~t", start + 2);
            string s = input.Substring(start + 2, end - start - 2);
            string ss = "$title$";
            a = a.Replace(ss, s);

            //替换时间
            //int start2 = input.IndexOf("~d");
            //int end2 = input.IndexOf("~d", start2 + 2);
            //string s2 = input.Substring(start2 + 2, end2 - start2 - 2);
            string s2 = DateTime.Now.ToString();
            string ss2 = "$time$";
            a = a.Replace(ss2, s2);

            //替换简介
            int start3 = input.IndexOf("~i");
            int end3 = input.IndexOf("~i", start3 + 2);
            string s3 = input.Substring(start3 + 2, end3 - start3 - 2);
            string ss3 = "$info$";
            a = a.Replace(ss3, s3);

            //写入文件
            string filename = @"D:\Github\jtahstu.github.com\blogs\biji\" + file + ".html";
            StreamWriter readTxt = new StreamWriter(filename, false, utf8WithBom);
            readTxt.Write(a);
            readTxt.Flush();
            readTxt.Close();
        }
        #endregion

        #region 写入段落
        static void r_and_w_p(string file) {
            string filename = @"D:\Github\jtahstu.github.com\blogs\biji\" + file + ".html";
            //设置文件编码为utf-8包含BOM
            var utf8WithBom = new System.Text.UTF8Encoding(true);
            //先读取模板文件
            StreamReader reader = new StreamReader(filename, utf8WithBom);
            String a = reader.ReadToEnd();
            //然后读取输入文件
            StreamReader reader_input = new StreamReader(@"D:\Github\jtahstu.github.com\blogs\biji\input.txt", utf8WithBom);
            string input = reader_input.ReadToEnd();
            int st = input.IndexOf("~n");
            int en = input.IndexOf("~n", st + 2);
            string stt = input.Substring(st + 2, en - st - 2);
            int p_l = int.Parse(stt);
            for (int i = 1; i <= p_l; i++) {
                string ss = "p" + i.ToString();
                int start = input.IndexOf(ss);
                int end = input.IndexOf(ss, start + 2);
                string s = input.Substring(start + 2, end - start - 2);//获取当前段落要替换的字符串
                string sss = "$" + ss + "$";//模板中要替换的段落
                a = a.Replace(sss, s);//执行替换操作
            }
            reader.Close();
            reader_input.Close();
            //执行删除多余的段落
            for (int i = p_l + 1; i <= 30; i++) {
                string ss = "< p >$p" + i.ToString() + "$< /p >";
                a = a.Replace(ss, "");
            }
            //替换换行符
            a = a.Replace("\\", "< br >");

            //写入文件
            StreamWriter readTxt = new StreamWriter(filename, false, utf8WithBom);
            readTxt.Write(a);
            readTxt.Flush();
            readTxt.Close();
        }
        #endregion

        #region 主函数
        static void Main(string[] args) {
            Console.Write("请输入输出文件名:");
            string file = Console.ReadLine();
            //执行读写操作
            r_and_w_title(file);
            r_and_w_p(file);
            Console.WriteLine("OK!程序执行完毕,请按任意键退出.");
            Console.ReadKey();
            //File.Copy(@"change.html", @"HTMLPage1.html", true);
        }
        #endregion
    }
}
运行图片:
执行程序

输入文件格式

输出文件效果


by jtahstu on 2015/8/9


---

本文章采用 知识共享署名2.5中国大陆许可协议 进行许可,欢迎转载,演绎或用于商业目的。

---

二维码加载中...

扫一扫移动端访问O(∩_∩)O

发表评论

69 + 63 =
路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交
正在加载中……