1. 软件主要是在不改变文本文件内容情况下,自动填充空格一定数量的空格,达到空格右对齐的功能;
2. 本软件主要是节省个人的代码跟踪文档打空格的时间;
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 }