程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 寫文件時字段對齊和填充的C代碼實現

寫文件時字段對齊和填充的C代碼實現

編輯:關於C語言

寫文件時字段對齊和填充的C代碼實現


一、概述
在實際的軟件開發項目中,經常會遇到需要轉換某些文件中的字段格式的問題。例如,在生成的話單文件中,要求某些字段的長度固定,如果目前該字段的長度不足,則不足的位數用某些特殊的字符來填充(並可能會對填充的位置有要求)。之所以要求字段格式固定,是為了方便對文件的自動處理,因為很多軟件是按照一定的規則對文件進行處理的。本文示例了對字段進行填充的方法。
本文要求生成文件中的字段長度固定為10,如果寫入的內容長度小於10,不足部分可以用空格或0來填充。此外,要求程序可以控制在寫入內容的左邊或右邊填充及填充的是0還是空格。

二、C代碼實現

/**********************************************************************
* 版權所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名稱:TestAlign.c
* 文件標識:無
* 內容摘要:示例對文件內容對齊和填充的處理
* 其它說明:無
* 當前版本:V1.0
* 作   者:Zhou Zhaoxiong
* 完成日期:20150901
*
**********************************************************************/
#include 
#include 
#include 

// 重定義數據類型
typedef signed   int  INT32;
typedef signed   char INT8;

// 函數聲明
void WriteFile(INT32 iAlignFlag, INT8 *pszTestStr);
INT32 main();

/**********************************************************************
* 功能描述:主函數
* 輸入參數:無
* 輸出參數:無
* 返 回 值:無
* 其它說明:無
* 修改日期        版本號            修改人            修改內容
* -------------------------------------------------------------------
* 20150901        V1.0           Zhou Zhaoxiong        創建
***********************************************************************/
INT32 main()
{
    INT32 iAlignFlag   = 0;
    INT8 szTestStr[50] = {0}; 

    printf(請輸入對齊方式(1, 2, 3, 4)和測試字符串
);

    scanf(AlignFlag=%d, TestStr=%s, &iAlignFlag, szTestStr);

    printf(輸入信息: 對齊方式%d, 測試字符串%s
, iAlignFlag, szTestStr);

    WriteFile(iAlignFlag, szTestStr);   // 調用寫文件函數

    return 0;                 // main函數執行成功返回0
}


/**********************************************************************
* 功能描述:根據對齊方式寫文件
* 輸入參數:iAlignFlag-對齊方式
            pszTestStr-測試字符串
* 輸出參數:無
* 返 回 值:無
* 其它說明:設基准長度為10個字節, 未達到則補空格或0
* 修改日期      版本號            修改人            修改內容
* -------------------------------------------------------------------
* 20150901      V1.0          Zhou Zhaoxiong       創建
***********************************************************************/
void WriteFile(INT32 iAlignFlag, INT8 *pszTestStr)
{
    FILE *fp             = NULL;
    INT8 szContent[50]   = {0};
    INT8 szFileName[50]  = {0};

    if (pszTestStr == NULL)   // 判斷輸入參數是否為空
    {
        printf(WriteFile: input parameter(s) is NULL!);
        return;
    }

    if (iAlignFlag == 1)     // 左對齊, 不足的位補空格
    {
        _snprintf(szContent, sizeof(szContent)-1, %10s, pszTestStr);
    }

    if (iAlignFlag == 2)     // 右對齊, 不足的位補空格
    {
        _snprintf(szContent, sizeof(szContent)-1, %-10s, pszTestStr);
    }

    if (iAlignFlag == 3)     // 左對齊, 不足的位補0
    {
        _snprintf(szContent, sizeof(szContent)-1, %-s%0*d, pszTestStr, 10-strlen(pszTestStr), 0);
    }

    if (iAlignFlag == 4)     // 右對齊, 不足的位補0
    {
        _snprintf(szContent, sizeof(szContent)-1, %0*d%s, 10-strlen(pszTestStr), 0, pszTestStr);
    }

    // 將文件內容寫入
    strcpy(szFileName, D:\Test\TestFile.txt); // 注意: 文件目錄是雙, 不要寫成D:TestTestFile.txt
    fp = fopen(szFileName, w);
    if (fp != NULL)
    {
        fputs(szContent, fp);
        fclose(fp);
        fp = NULL;
        printf(WriteFile: Write %s into file successfully!
, szContent);
    }
    else
    {
        printf(WriteFile: Write %s into file failed!
, szContent);
    }
}

三、程序說明
1.本程序用iAlignFlag來表示填充方式,具體如下:
(1) 如果iAlignFlag為1,則表示在寫入內容的右邊填充空格(即內容左對齊, 不足的位補空格)。
(2) 如果iAlignFlag為2,則表示在寫入內容的左邊填充空格(即內容右對齊, 不足的位補空格)。
(3) 如果iAlignFlag為3,則表示在寫入內容的右邊填充0(即內容左對齊, 不足的位補0)。
(4) 如果iAlignFlag為4,則表示在寫入內容的左邊填充0(即內容右對齊, 不足的位補0)。
2.大家要特別注意本程序中在左邊或右邊填充0或空格的方法,具體如下:
(1) 左對齊,右補空格:
_snprintf(szContent, sizeof(szContent)-1, “%10s“, pszTestStr);
(2) 右對齊,左補空格:
_snprintf(szContent, sizeof(szContent)-1, “%-10s“, pszTestStr);
(3) 左對齊,右補0:
_snprintf(szContent, sizeof(szContent)-1, “%-s%0*d“, pszTestStr, 10-strlen(pszTestStr), 0);
(4) 右對齊,左補0:
_snprintf(szContent, sizeof(szContent)-1, “%0*d%s“, 10-strlen(pszTestStr), 0, pszTestStr);

四、程序輸出
程序輸出的截圖如下:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
同時,查看“D:Test”下的“TestFile.txt”文件內容,可以看到寫入內容是正確的。

五、總結
本程序代碼雖然不多,也不復雜,但大家要特別注意對於對齊和字符填充的處理方法。如果讓大家從頭開始編寫程序,也不是那麼容易找到正確的處理方法的。這也說明了很多問題看似簡單,但要完美地解決它,還需要我們具備扎實的功底,也還需要我們多多實踐。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved