计算标签并检查行长度

时间:2012-12-06 16:56:26

标签: c file

我正在学习c并且我实际上正在尝试编写一个程序来计算文件中TAb的数量,如果一行有一个标签,我想打印整行和标签的数量这条线。如果它不是那么困难,我希望你帮我这样做,如果一行超过80个字符,打印这一行和字符数 我有这个主要功能:

include <stdio.h> /* printf */

/* Prototype from tablen.c */
void tablen(const char *filename);

int main(int argc, char **argv)
{
  if (argc < 2)
  {
    printf("Usage: tablen filename\n");
    printf("where: filename - file to process.\n");
    return -1;
  }

  tablen(argv[1]);

  return 0;
}

这个主要功能非常基础,所以我希望那里没有错误。 而且这个功能也是:

include <stdio.h>  /* FILE, fopen, feof, fgets, fclose   */
include <string.h> /*  strlen */ 

void tablen(const char *filename)
{

    /*Variables*/   
    int i; /*loop controller */
    int tabs = 0; /*number of tabs*/
    int line = 0; /*current line*/
    int size_string; /*size of the string*/

    File *file; /* open and read the file */


    file = fopen(filename, "rt"); /*open the file for read text*/
    size_string = strlen(filename);

    /*if we can read the file*/
    if(file)
    {
        /*while we don't reach the end of file, we still reading*/
        while (!feof(file))
        {
            for(i = 0; i < size_string; i++)
            {
                if(filename[i] == 9) /*ASCII value of TAB is 9 or '\'*/
                {
                    tabs++;
                }           

                if(tabs > 0)
                {
                    printf("# %i: (tabs: %i) |", line, tabs);
                }
                if(filename[i] == '\n')
                {
                    line++;                 
                    tabs = 0;
                }


            }
        }
    }
}

我写了这个伪代码,我认为这是正确的 对于计数标签: 首先打开一个文件读取/文本 虽然文件中有更多行(并逐个读取),但我们会计算制表符的数量 如果我们找到带有标签的行,则打印行和标签计数 当然我们关闭文件

用于检查行长度

首先打开一个文件读取/文本,然后文件中有更多行,我们检查每行的长度。 如果该行超过80个字符,我们将打印该行与长度信息

我不知道我是否以正确的方式,因为这是我第一次尝试处理文件

1 个答案:

答案 0 :(得分:1)

要一次计算一行中的标签数,最好使用getline()函数。 getline()从文件流中读取一行并返回读取行中的字符数。阅读getline()的手册页以获取更多信息。

您可以查看下面的代码来解决您的问题

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
    FILE * fp;
    char * line = NULL;
    size_t len = 0;
    ssize_t read;
    int tabs=0,totaltabs=0,i;
        fp = fopen(argv[1], "r");
        if (fp == NULL)
           exit(EXIT_FAILURE);
        while ((read = getline(&line, &len, fp)) != -1) {
              printf("Retrieved line of length %d\n", read);
        for(i=0;i<read;i++){
            if(line[i] == '\t')
            tabs++; 
        }
        if(tabs){
                    printf("line = %s\nNumber of tabs = %d\n",line,tabs);
            totaltabs = totaltabs+tabs;
            tabs=0;
           }
        if(read >=80)
            printf("%s\n",line);
    }       
           if (line)
               free(line);
           exit(EXIT_SUCCESS);

}