空格填充器(alignBySpace)

简介: 1 /******************************************************************* 2 * 空格填充器(alignBySpace) 3 * 声明: 4 * 1.
 1 /*******************************************************************
 2  *                     空格填充器(alignBySpace)
 3  * 声明:
 4  *  1. 软件主要是在不改变文本文件内容情况下,自动填充空格一定数量的
 5  *      空格,达到空格右对齐的功能;
 6  *  2. 本软件主要是节省个人的代码跟踪文档打空格的时间;
 7  *
 8  *                             2015-8-3 晴 深圳 南山平山村 曾剑锋
 9  ******************************************************************/
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13 
14 int main ( int argc, char ** argv ) {
15 
16     int    ret                      = 0;
17     int    column                   = 0;
18     char  *tempFile                 = "generateFile.txt";
19     char  *readBuffer               = NULL;
20     size_t bufferSize               = 512;
21     int    readBufferIndex          = 0;
22     int    writeBufferIndex         = 0;
23     char   writeBuffer[bufferSize];
24 
25     if ( ( argc < 2 ) || ( argc > 3 ) ) {
26         printf ( "USAGE:\n" );
27         printf ( "    alignBySpace <file> [column].\n" );
28         return -1;
29     }
30 
31     if ( argc == 2 ) {
32         printf ( "\nUse default columns: 80. \n\n" );
33         column = 80;
34     } else 
35         column = atoi ( argv[2] );
36 
37     FILE *readfile  = fopen ( argv[1], "r" );                         // only read
38     FILE *writefile = fopen ( tempFile, "w" );                        // only write
39 
40     /**
41      * man datasheet:
42      *    If *lineptr is NULL, then getline() will allocate a buffer for storing the line, 
43      *    which should be freed by the user program. (In this case, the value in *n is ignored.)
44      */
45     while ( ( ret = getline( &readBuffer, &bufferSize, readfile ) ) != -1 ) {
46 
47         readBufferIndex  = 0;
48         writeBufferIndex = 0;
49 
50         while ( readBufferIndex < ret ) {
51             if ( readBuffer [ readBufferIndex ] != '\t' )             // kick out '\t'
52                 writeBuffer [ writeBufferIndex++ ] = readBuffer [ readBufferIndex++ ];
53             else {
54                 memset ( writeBuffer + writeBufferIndex, ' ', 4 );    // every tab key was 4 space
55                 writeBufferIndex += 4;    
56                 readBufferIndex++;
57             }
58         }
59 
60         writeBufferIndex--;                                           // back to real index
61 
62         if ( ( column - writeBufferIndex ) > 0 ) {                    // may be real column longer than we set
63             // '\n' at end of a line, need to kick it out
64             memset ( writeBuffer + writeBufferIndex, ' ', column - writeBufferIndex );
65             writeBuffer [ column ] = '\n';                            // for end of a line 
66             writeBuffer [ column + 1 ] = '\0';                        // for end of a string
67         } else 
68             writeBuffer [ writeBufferIndex + 1 ] = '\0';              // make sure end of a string
69 
70         fputs ( writeBuffer, writefile );                             // write to file 
71 
72         bzero ( readBuffer,  bufferSize );                            // clean buffer
73         bzero ( writeBuffer, bufferSize );
74 
75     }
76 
77     free ( readBuffer );                                              // referrence getline()
78 
79     fclose ( readfile );
80     fclose ( writefile );
81 
82     remove ( argv[1] );                                               // delete source file
83     rename ( tempFile, argv[1] );                                     // tempfile rename to source file
84 }

 

目录
相关文章
|
5月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
58 0
|
7月前
387.字符串中的第一个唯一字符 —> `size()`
387.字符串中的第一个唯一字符 —> `size()`
Notepad++ 设置tab为N个空格
Notepad++ 设置tab为N个空格
138 1
|
数据库
UTF-8编码中的特殊空格之C2 A0 -> NO-BREAK SPACE
UTF-8编码中的特殊空格之C2 A0 -> NO-BREAK SPACE
216 0
|
缓存 Shell 开发工具
【记一次pull request的惨痛教训】不可见的分隔符之Zero-with-space
【记一次pull request的惨痛教训】不可见的分隔符之Zero-with-space
138 0
【记一次pull request的惨痛教训】不可见的分隔符之Zero-with-space
string 去掉左边空格
string 去掉左边空格
99 0
|
前端开发 JavaScript
css:white-space及文本回车换行符
css:white-space及文本回车换行符
401 0
css:white-space及文本回车换行符
|
Android开发
如何在Eclipse中显示空格(space)和制表符(tab)
在ECLIPSE开发中,我们有时无法区分空格(SPACE)和制表符(TAB),通过下面的选择设置就能很好区分 Window->Preferences->General->Editors->Text Editors->Show whitespace characters ...
1136 0
用white-space:nowrap;解决中文标签换行问题
在web2.0的概念中,标签是个时常出现的东西,可是在设计时中文不象英文那样在表现标签云时表现的那么好,主要是中文词组的成为标签后,有时会出现长标签在标签云中被断行的问题。这个主要是用display:inline-block;这个属性~,具体代码如下:
379 0
去掉多余的空格---输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。输入格式
输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。 输入格式 共一行,包含一个字符串。 输出格式 输出去掉多余空格后的字符串,占一行。 数据范围 输入字符串的长度不超过 200200。 保证输入字符串的开头和结尾没有空格。
331 0