gpt4 book ai didi

c - Strsep,进一步解析 CSV 输入

转载 作者:行者123 更新时间:2023-11-30 16:36:26 24 4
gpt4 key购买 nike

使用 strsep 拆分包含一堆无用垃圾的 CSV (","Delim)。其中一个条目两边都有引号(即 Florida,"Bob",1999),我想在将它们保存到数组中之前将其取出。

如何删除名称中的引号?谢谢!

for (int i = 0; i < 19; i++)
{
token = strsep(&copy, ","); //Split token
if (i == 3) {one_spot->location = token;}
if (i == 17) {one_spot->name = token;}//the Name is in quotes in CSV
if (i == 18) {one_spot->year = atoi(token);}
}
all_spots[j] = one_spot; //Add to array.

最佳答案

你可以这样做:

  1. 使用 strchr 查找第一个 "
  2. 如果找到,则查找下一个
  3. 使用 memcpy 复制引号之间的字符串。

if (i == 17)
{
char *firstq = strchr(token, '"');
if(firstq == NULL)
{
one_song->name = strdup(token);
continue;
}

char *lastq = strchr(firstq++, '"');
if(lastq == NULL)
{
// does not end in ", copy everything
one_song->name = strdup(token);
continue;
}

size_t len = lastq - firstq;

char *word = calloc(len + 1, 1);
if(word == NULL)
{
// error handling, do not continue
}

memcpy(word, firstq, len); // do not worry about \0 because of calloc
one_song->name = word;
}

请注意,我使用 strdup 进行赋值 one_song->name = strdup(token);calloc来分配内存。 strsep 返回一个指向 copy + 的指针抵消。根据您创建/分配副本的方式,此内存可能是一旦函数退出就无效。这就是为什么最好创建一个副本在将其分配给结构之前先将其原始。

这段代码很简单,它不处理开头和结尾的空格字符串。它可以区分 abc"abc" 但失败于"abc"d"abc"def"。它也不处理转义引号等。此代码仅向您展示一种从引号中提取字符串的方法。我的工作不是为您编写练习,但我可以向您展示如何开始。

关于c - Strsep,进一步解析 CSV 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48489701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com