我必须打印csv文件的格式表。我想知道您是否知道任何特定的库或工具可以帮助我解决此问题-我只是通过谷歌搜索找不到任何东西。
这是代码,代码工作正常,只需要像格式化表格一样打印即可。谢谢!
void opportunity_table()
{
int i = 3;
char line[LINESIZE];
FILE* fp = fopen("opportunity_table.csv", "r");
if (!fp) {
printf("File failed to open!\n");
exit(1);
}
while (fgets(line, LINESIZE, fp)) {
while (line[i] != '\n') {
if (line[i] == ',') {
printf("%s ", "");
}
else
printf("%c", line[i]);
i++;
}
i = 0;
puts(" ");
}
}
我从运行这段代码中获得的输入是混乱的,看起来真的很糟糕。
答案 0 :(得分:3)
利用%s
说明符的width和precision字段。宽度字段设置至少指定字符的宽度。精度字段最多可以打印指定数量的字符。只要宽度大于精度即可工作。
strpbrk
将给出一个指向字符串中下一个字符或NULL的指针。
格式字符串"%*.*s"
将使打印正确。使用"%-*.*s"
左对齐。
#include <stdio.h>
#include <string.h>
#define WIDTH 7
int main( void) {
char csv[] = "a,b,cde,fghij,i,jh\n";
char *item = csv;
char *comma = NULL;
while ( *item && ( comma = strpbrk ( item, ",\n"))) {//pointer to each comma and the newline
printf ( "%*.*s", WIDTH, comma - item, item);
item = comma + 1;//skip the comma or newline
}
printf ( "\n");
return 0;
}
如果字段的宽度需要变化,则可以使用宽度数组。
#include <stdio.h>
#include <string.h>
int main( void) {
char csv[4][50] = {
"a,b,cde,fghij,i,jh\n",
"i,jk,lmno,pq,rst,uvw\n",
"0,1,2,3456,78,9\n",
"x,y,z,01,2345,6789\n"
};
char *item = NULL;
char *comma = NULL;
int width[] = { 3, 4, 6, 7, 6, 5};
int field = 0;
for ( int loop = 0; loop < 4; ++loop) {
field = 0;
item = csv[loop];
while ( *item && ( comma = strpbrk ( item, ",\n"))) {//pointer to each comma and the newline
printf ( "%*.*s", width[field], comma - item, item);
item = comma + 1;//skip the comma or newline
field++;
}
printf ( "\n");
}
return 0;
}
可以通过两次读取文件来自定义。字段数和最大宽度可以在第一次读取时确定。第二次读取文件并使用计算出的宽度进行打印。