我正在学习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个字符,我们将打印该行与长度信息
我不知道我是否以正确的方式,因为这是我第一次尝试处理文件
答案 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);
}