-1

我想用“,-1”替换.csv文件中一行中所有“,”的情况。在这个id之前也喜欢在行尾加逗号。

我试图通过将行分成两个子字符串来获得它,其中一个是 , 之前的东西,一个是之后的东西,然后将它们连接起来,但我可能也弄乱了每个东西指向的东西。

同样在此操作之前,我想在文件末尾添加一个额外的逗号,因此如果末尾有缺失值,也会得到处理。

//Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "/n");
strncpy(temp, ",/n", 2);
puts(line);

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[50];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    strncpy(temp, ",-1,", 4);
    strcat(temp, endTemp);
    puts(line);
}

我想我把两个子字符串弄乱了,因为如果起始字符串是这样的:

ajd43,232,,0,0,0,3

它打印

ajd43,232,-1,0,0,0,3 ,(/n)0,0,0,3

我认为错误在最后的 strcat 中,但如果它们是执行此操作的更简单方法,我想使用它。

4

1 回答 1

2

(1) 你的“/n”应该是“\n”。

(2) 使用 strncpy(temp, ",\n", 3); 或在 temp[2] 之后手动添加一个空字符。

(3) 使用 strncpy(temp, ",-1,", 5); 或在 temp[4] 之后手动添加一个空字符。

(4) 考虑截断并使用 strcat 而不是 strncpy。

(5) 如果要在生产中使用,请检查是否超限。

(6) 只需用逗号替换换行符。puts() 会将其添加回来。(因此改变#2)

像这样:

// Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "\n");
strcpy(temp, ",");

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[70];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    temp[0] = '\0';
    strncat(line, ",-1,", 70);
    strncat(line, endTemp, 70);
}
puts(line);
于 2019-01-23T03:31:21.320 回答