ConvertTab2Div.c

純文字檔開頭的\t轉換成div的縮排程式,並輸出成output.txt。















1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


17


18


19


20


21


22


23


24


25


26


27


28


29


30


31


32


33


34


35


36


37


38


39


40


41


42


43


44


45


46


47


48


49


50


51


52


53


54


55


56


57


58


59


60


61


62


63


64


65


66


67


68


69


70


71


72




#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

/*

程式說明

    純文字檔開頭的\t轉換成div的縮排程式,並輸出成output.txt

使用方法

    cc 此檔名.c

    ./此檔名.此副檔名 要轉換文字檔

注意!

    只有開頭的\t會轉成div。

    換行字元是unix的換行字元,如果是windows的字元請用dos2unix這個程式轉換一下

*/

 

 

 

 

int main(int argc, char* argv[])

{

    if (argc != 2) {

        printf("argc Error!\n");

    }

    FILE *pfi;

    FILE *pfo;

    char buf[513];

    pfi =fopen(argv[1],"r");

    pfo =fopen("output.txt","w");

    int lastLineTab=0,nowLineTab=0,newLine=1,haveDiv=0;

    fprintf(pfo,"<div>\n");

    while (fgets(buf,2,pfi)!=NULL){

        //讀新的一行TAB數量

        if (buf[0]=='\t' && newLine==1){

            nowLineTab++;continue;

        }

        //遇到換行

        if (buf[0]=='\n'){

            //單獨一行幹行上一行又是有div的話

            if (haveDiv==1 && newLine==1) {

                fprintf(pfo,"</div>\n");

                haveDiv=0;

            }

 

            fprintf(pfo,"<br />\n");

            lastLineTab = nowLineTab;

            newLine=1;nowLineTab=0;

            continue;

        }

 

 

 //       if (newLine==1) fprintf(pfo,"\n<-----NT:%d, LT:%d, HD:%d, ------>\n",nowLineTab, lastLineTab, haveDiv);

 

        //如果TAB數量跟上一行不一樣就要新增DIV但是如果一樣則不用新增DIV

        if (nowLineTab != lastLineTab && newLine==1){

            if (haveDiv==1) {

                fprintf(pfo,"</div>\n");

                haveDiv=0;

            }

            if (nowLineTab != 0){

                fprintf(pfo,"<div style=\"padding-left: %dpx;\">\n",30*nowLineTab);

                haveDiv=1;

            }

        }

        fprintf(pfo,"%c",buf[0]);

        //之後就不是新的一行了

        newLine=0;

    }

    fprintf(pfo,"</div>\n");

    fclose(pfo);

    fclose(pfi);

    return 0;

}



留言

這個網誌中的熱門文章

成人剪舌繫帶聽過嗎?我剪了!!

Scp - ssh 的遠端檔案傳輸指令

睡覺使你更有效率