发新话题
打印

[原创]一个将源代码加上行数重新存放的小工具

[原创]一个将源代码加上行数重新存放的小工具

  文章作者:冰血封情[E.S.T]
信息来源:邪恶八进制 中国

这个程序算是对前面学习进程的一个小总结 原来在Bideyore的指导下 我们探讨了一个可以把源代码文件中的东西逐行读出并且加上行号和页号的小工具
现在我把他改进了一下 一个main()解决 虽然对结构化编程来说这样做是不对滴 不过本来程序就不长么....
实现方法和以前与Bideyore讨论的那个略有不同 不过这个工具在分析程序的时候还是有点小用处的 全当菜鸟学习总结好了:)

使用方法:
引用:
C:\>codeprn

Codez by EvilOctal[E.S.T]
Thanx to Bideyore[E.S.T]
This tool can help you read code by line.
Proper Usage is:
codeprn infile.txt outfile.txt

codeprn infile.txt outfile.txt
假设如果其中 infile.txt 内容如下:
引用:
#include <stdio.h>

#define MAX 4

struct part {
     short number;
     char name[10];
} data[MAX] = {1, "Smith", 2, "Jones", 3, "Adams", 4, "Wilson"};

struct part *p_part;
int count;

int main(void)
{
     p_part = data;

     for( count = 0; count < 4; count++)
     {
          printf("At address %d: %d %s\n", p_part, p_part->number, p_part->name);
          p_part++;
     }

     return 0;
}
那么 生成的 outfile.txt 的内容格式将加上行号:
引用:
  1:     #include <stdio.h>
  2:     
  3:     #define MAX 4
  4:     
  5:     struct part {
  6:          short number;
  7:          char name[10];
  8:     } data[MAX] = {1, "Smith", 2, "Jones", 3, "Adams", 4, "Wilson"};
  9:     
  10:     struct part *p_part;
  11:     int count;
  12:     
  13:     int main(void)
  14:     {
  15:          p_part = data;
  16:     
  17:          for( count = 0; count < 4; count++)
  18:          {
  19:              printf("At address %d: %d %s\n", p_part, p_part->number, p_part->name);
  20:              p_part++;
  21:          }
  22:     
  23:          return 0;
  24:     }
  24:     //BY E.S.T CodePrn Tools
加上行号 方便阅读 特别是在发帖发程序代码的时候 嘿嘿....
我一共写了两个版本的源代码 第一个是当初学习输入输出写的 另外一个是学习到文件的时候写的:
方法一:2kb
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>

int main( int argv, char *argc[] )
{
     char buffer[256];
     FILE *fp1, *fp2;
     int line = 1, flag = 1;

     if( argv != 3 )
     {
          fprintf(stderr, "\n\tCodez by EvilOctal[E.S.T]\n\tThanx to Bideyore[E.S.T]" );
          fprintf(stderr, "\n\tThis tool can help you read code by line." );
          fprintf(stderr, "\n\tProper Usage is: " );
          fprintf(stderr, "\n\t%s infile.txt outfile.txt\n", argc[0] );
          return(1);
     }
     
     if (( fp1 = fopen( argc[1], "r" )) == NULL )
     {
          fprintf( stderr, "Error opening file, %s!", argc[1]);
          return(1);
     }

     if (( fp2 = fopen( argc[2], "w+" )) == NULL )
     {
          fprintf( stderr, "Error opening file, %s!", argc[2]);
          return(1);
     }
     
     while( fgets( buffer, 256, fp1 ) != NULL )
     {
          if( flag )
              fprintf( fp2, "%4d:\t%s", line, buffer );
          else
              fprintf( fp2, "%s", buffer );
          if( buffer[strlen(buffer)-1] == &#39;\n&#39; )
              line++, flag = 1;
          else
              flag = 0;
     }
     fprintf( fp2, "\n%4d:\t//BY E.S.T CodePrn Tools", line);
     fclose(fp1);
     fclose(fp2);
     return 0;
}
方法二:1kb
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>

void prnline(FILE *p1, FILE *p2);

int main(int argv, char *argc[])
{
     FILE *fp1, *fp2;

     if(argv != 3)
     {
          fprintf(stderr, "\nCodez by EvilOctal[E.S.T]\n" );
          fprintf(stderr, "Usage: %s <infile> <outfile>", argc[0]);
          exit (0);
     }
     if((fp1 = fopen(argc[1], "r")) == NULL)
     {
          fprintf(stderr, "Error open %s!\nPlease chech the file...\n", argc[1]);
          exit (0);
     }
     if ((fp2 = fopen(argc[2], "w")) == NULL)
     {
          fprintf(stderr, "Error open %s!\nPlease chech the file...\n", argc[2]);
          exit (0);
     }
     prnline(fp1, fp2);
     fclose(argc[1]);
     fclose(argc[2]);

     return 0;
}

void prnline(FILE *p1, FILE *p2)
{
     char buffer[256];
     int n =0;

     while(!feof(p1))
     {
          n++;
          fprintf(p2, "%d: ", n);
          fgets(buffer, 256, p1);
          fputs(buffer, p2);
     }
}
附件是方法一的

附件

codeprn.rar (31 KB)

2005-3-21 07:15, 下载次数: 29

qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

应该就是用fgets读文件,判断回车前是不是分号。。:)
安全就象毒品一样,上瘾了就戒不掉了 http://www.6code.net

TOP

  我是这样判断的是
判断读入的字符串的倒数第2个是不是\n
唯一的关键的关键是
buffer[strlen(buffer)-1] == &#39;\n&#39;
以前和Bideyore讨论的时候 那个程序如果一行多余一定的字符个数就会截取前面的
这个改进的可以连续读 直到换行才结束
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题