我想将.csv文件中一行中的所有“,”用“,-1,”替换。在此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中,但是如果它们是执行此操作的更简单方法,我想使用它。
答案 0 :(得分:2)
(1)您的“ / n”应该为“ \ n”。
(2)使用strncpy(temp,“,\ n”,3);或在temp [2]之后手动添加一个空字符。
(3)使用strncpy(temp,“,-1,”,5);或在temp [4]之后手动添加一个空字符。
(4)考虑截断并在strncpy上使用strcat。
(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);