#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "minicsv.h"
static inline void
_minicsv_out_col(char * const col_start, char ** const cols,
size_t * const cols_count_p, const size_t cols_max)
{
if (*cols_count_p < cols_max) {
cols[*cols_count_p] = col_start;
}
(*cols_count_p)++;
}
static inline void
_minicsv_parse_line_noquote(const int c, char ** const pos_p,
char ** const col_start_p, int * const state_p,
char ** const cols, size_t * const cols_count_p,
const size_t cols_max)
{
switch (c) {
case '\n':
*state_p = 2;
case MINICSV_DELIM:
*(*pos_p)++ = 0;
_minicsv_out_col(*col_start_p, cols, cols_count_p, cols_max);
*col_start_p = *pos_p;
break;
case MINICSV_QUOTE:
*state_p = 1;
*col_start_p = ++*pos_p;
break;
case '\r':
**pos_p = 0;
default:
(*pos_p)++;
}
}
static inline void
_minicsv_parse_line_quote(const int c, char ** const pos_p,
int * const state_p)
{
if (c == MINICSV_QUOTE) {
if (*(*pos_p + 1U) == MINICSV_QUOTE) {
memmove(*pos_p, *pos_p + 1U, strlen(*pos_p));
} else {
**pos_p = 0;
*state_p = 0;
}
}
(*pos_p)++;
}
char *
minicsv_parse_line(char * const buf, char ** const cols,
size_t * const cols_count_p, const size_t cols_max)
{
char *col_start = buf;
char *pos = buf;
int c;
int state = 0;
*cols_count_p = (size_t) 0U;
while ((c = *pos) != 0) {
switch (state) {
case 0:
_minicsv_parse_line_noquote(c, &pos, &col_start, &state,
cols, cols_count_p, cols_max);
break;
case 1:
_minicsv_parse_line_quote(c, &pos, &state);
break;
case 2:
return pos;
}
}
if (state == 0) {
_minicsv_out_col(col_start, cols, cols_count_p, cols_max);
}
return pos;
}
void
minicsv_trim_cols(char ** const cols, const size_t cols_count)
{
char *col;
size_t col_end;
size_t i = (size_t) 0U;
while (i < cols_count) {
col = cols[i];
while (*col != 0 && isspace((int) (unsigned char) *col)) {
cols[i] = ++col;
}
col_end = strlen(col);
while (col_end > (size_t) 0U &&
isspace((int) (unsigned char) col[--col_end])) {
col[col_end] = 0;
}
i++;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于C语言的MiniCSV解析库示例:csv文件解析
共14个文件
o:3个
c:3个
h:2个
需积分: 5 4 下载量 130 浏览量
2023-07-01
15:18:57
上传
评论
收藏 21KB RAR 举报
温馨提示
基于CodeBlocks开发环境,使用标准C语言,相关文章:https://blog.csdn.net/whik1194/article/details/131490767
资源推荐
资源详情
资源评论
收起资源包目录
minicsv_demo_codeblocks.rar (14个子文件)
minicsv_demo_codeblocks
demo.cbp 1KB
README.markdown 1KB
obj
Debug
minicsv-test.o 3KB
minicsv.o 4KB
main.o 3KB
minicsv-test.c 1017B
bin
Debug
demo.exe 35KB
minicsv.c 3KB
minicsv-test.h 0B
demo.layout 912B
demo.csv 154B
minicsv.h 1KB
main.c 1KB
demo.depend 822B
共 14 条
- 1
资源评论
whik1194
- 粉丝: 3w+
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功