88 lines
2.9 KiB
Markdown
88 lines
2.9 KiB
Markdown
# csv 文件
|
|
|
|
> 本目录的文件从 [awtk-csv-file](https://github.com/zlgopen/awtk-csv-file) 拷贝而来。如果需要修改,请先修改 [awtk-csv-file](https://github.com/zlgopen/awtk-csv-file),再拷贝过来。
|
|
|
|
csv 为可选组件,需要自己包含头文件
|
|
|
|
```c
|
|
#include "csv/csv_file.h"
|
|
#include "csv/csv_file_object.h"
|
|
```
|
|
|
|
## 示例:
|
|
|
|
* 普通方式访问
|
|
|
|
```c
|
|
const char* str = "11,12,13\n21,22,23";
|
|
csv_file_t* csv = csv_file_create_with_buff(str, strlen(str), ',');
|
|
ASSERT_EQ(csv_file_get_rows(csv), 2);
|
|
ASSERT_EQ(csv_file_get_cols(csv), 3);
|
|
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 0), "11");
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 1), "12");
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 2), "13");
|
|
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 0), "21");
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 1), "22");
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 2), "23");
|
|
|
|
csv_file_destroy(csv);
|
|
```
|
|
|
|
```c
|
|
TEST(csv_file, title) {
|
|
const char* str = "aa,bb,cc\n11,12,13\n21,22,23";
|
|
csv_file_t* csv = csv_file_create_with_buff(str, strlen(str), ',');
|
|
ASSERT_EQ(csv_file_get_rows(csv), 3);
|
|
ASSERT_EQ(csv_file_get_cols(csv), 3);
|
|
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 0), "aa");
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 1), "bb");
|
|
ASSERT_STREQ(csv_file_get(csv, 0, 2), "cc");
|
|
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 0), "11");
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 1), "12");
|
|
ASSERT_STREQ(csv_file_get(csv, 1, 2), "13");
|
|
|
|
ASSERT_STREQ(csv_file_get(csv, 2, 0), "21");
|
|
ASSERT_STREQ(csv_file_get(csv, 2, 1), "22");
|
|
ASSERT_STREQ(csv_file_get(csv, 2, 2), "23");
|
|
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 1, "aa"), "11");
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 1, "bb"), "12");
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 1, "cc"), "13");
|
|
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 2, "aa"), "21");
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 2, "bb"), "22");
|
|
ASSERT_STREQ(csv_file_get_by_name(csv, 2, "cc"), "23");
|
|
|
|
ASSERT_EQ(csv_file_get_col_of_name(csv, "aa"), 0);
|
|
ASSERT_EQ(csv_file_get_col_of_name(csv, "bb"), 1);
|
|
ASSERT_EQ(csv_file_get_col_of_name(csv, "cc"), 2);
|
|
|
|
csv_file_destroy(csv);
|
|
}
|
|
```
|
|
* 以对象的方式访问:
|
|
|
|
```c
|
|
const char* str = "aa,bb,cc\n11,12,13\n21,22,23";
|
|
csv_file_t* csv = csv_file_create_with_buff(str, strlen(str), ',');
|
|
object_t* obj = csv_file_object_create(csv);
|
|
|
|
ASSERT_EQ(object_get_prop_int(obj, "#size", 0), 3);
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[0].[0]"), "aa");
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[0].[1]"), "bb");
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[0].[2]"), "cc");
|
|
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[1].[0]"), "11");
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[1].[1]"), "12");
|
|
ASSERT_STREQ(object_get_prop_str(obj, "[1].[2]"), "13");
|
|
OBJECT_UNREF(obj);
|
|
```
|
|
|
|
## 具体用法请参考:
|
|
* https://github.com/zlgopen/awtk-csv-file/blob/master/tests/csv_file_test.cc
|
|
* https://github.com/zlgopen/awtk-csv-file/blob/master/tests/csv_file_object_test.cc
|