# informat.csv csv相关

## 概述
使用`informat.csv`执行csv文件的读写操作

## CsvReader

### reader
从本地沙盒中读取csv文件,如果文件不存在将会抛出异常

```javascript
informat.csv.reader(file)
```

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| file  | `String` | app的沙盒环境中的文件地址 |

**返回值**

类型为`CsvReader`

**示例**
```javascript
const reader = informat.csv.reader('path/to/file.csv')
```

### setFieldSeparator
设置字段分隔符

```js
reader.setFieldSeparator(c)
```
::: tip 提示
- 默认分隔符是逗号`,`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 字段分隔符 |

**示例**

```js
reader.setFieldSeparator(',')
```


### setQuoteCharacter
设置引号字符

```js
reader.setQuoteCharacter(c)
```

::: tip 提示
- 默认是双引号`"`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 引号字符 |

**示例**
```js
reader.setQuoteCharacter('\"')
```

### setCommentCharacter
设置注释字符,
```js
reader.setCommentCharacter(c)
```

::: tip 提示
默认注释字符`#`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 注释字符 |

**示例**
```js
reader.setCommentCharacter('#')
```


### setCommentStrategy
设置注释策略
```js
reader.setCommentStrategy(s)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| s  | String | NONE,SKIP,READ |

策略描述：

| 策略  | 描述      |
| ---- |---------|
| NONE  | 不检测注释 - 将所有内容都视为普通的单元格内容,默认值|
| SKIP  | 检测注释，但不返回注释行 |
| READ  | 检测注释并返回注释行（整行作为一个字段）。注释字符本身将被去除 |

**示例**
```js
reader.setCommentStrategy('NONE')
```

### setSkipEmptyRows
设置是否忽略空行
```js
reader.setSkipEmptyRows(f)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| f  | Boolean | 是否忽略空行 |

**示例**
```js
reader.setSkipEmptyRows(true)
```

### setErrorOnDifferentFieldCount
设置是否在遇到列数不一致时抛出异常
```js
reader.setErrorOnDifferentFieldCount(f)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| f  | Boolean | 是否抛出异常 |

**示例**
```js
reader.setErrorOnDifferentFieldCount(true)
```

### setCharset
设置字符集（默认字符集：UTF-8）

```js
reader.setCharset(charset)
```

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| charset  | String | 字符集,eg:UTF-8,GBK |

**示例**
```js
reader.setCharset('UTF-8')
```

### read
读取csv文件
```js
reader.read(accept)
```
| 参数  | 类型                | 描述      |
| ----  |-------------------|---------|
| accept | `Function(CsvRow)` | 每一行的处理函数 |


**示例**
```js
let reader = informat.csv.reader('path/to/file.csv');
reader.read((csvRow)=>{
    for(let i = 0; i < csvRow.getFieldCount(); i++){
        console.log(csvRow.getField(i))
    }
})
```

## CsvRow

### getOriginalLineNumber
返回行号
```js
csvRow.getOriginalLineNumber()
```

### getField
返回字段
```js
csvRow.getField(index)
```

| 参数  | 类型        | 描述 |
| ----  |-----------|----|
| index | `Integer` | 索引 |

### getFields
返回字段列表
```js
csvRow.getFields()
```

### getFieldCount
返回字段数量
```js
csvRow.getFieldCount()
```

### isComment
本行是否是注释
```js
csvRow.isComment()
```

### isEmpty
本行是否是空行
```js
csvRow.isEmpty()
```

## CsvWriter

### writer
获取输入对象，将内容写入到本地沙盒的csv文件中

```javascript
informat.csv.writer(file)
```

| 参数  | 类型     | 描述      |
| ----  |--------|---------|
| file  | `String` | app的沙盒环境中的文件地址 |

**返回值**

类型为`CsvWriter`

**示例**
```js
let writer=informat.csv.writer('path/to/file.csv');
writer.writeRow(['a','b','c','d']);
writer.writeRow(['1','2','3','4']);
writer.close();
```

### setCharset
设置字符集
```js
writer.setCharset(charset)
```
::: tip 提示
默认字符集：`UTF-8`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| charset  | String | 字符集,eg:UTF-8,GBK |

**示例**
```js
writer.setCharset('UTF-8')
```

### setFieldSeparator
设置字段分隔符
```js
writer.setFieldSeparator(c)
```

::: tip 提示
默认分隔符是逗号`,`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 字段分隔符 |

**示例**
```js
writer.setFieldSeparator()
```

### setQuoteCharacter
设置引号字符，默认是双引号（"）
```js
writer.setQuoteCharacter(c)
```

::: tip 提示
默认是双引号`"`
:::

| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 引号字符 |

**示例**
```js
writer.setQuoteCharacter()
```

### setQuoteStrategy
设置引号策略
```js
writer.setQuoteStrategy(s)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| s  | String | REQUIRED,EMPTY,ALWAYS |

策略描述：

| 策略  | 描述      |
| ---- |---------|
| REQUIRED  | 该策略要求所有的字段都必须使用引号 ，默认值|
| EMPTY  | 该策略要求只有在字段中包含逗号或换行符时才需要使用引号 |
| ALWAYS  | 该策略要求所有的字段都始终使用引号 |

**示例**
```js
writer.setQuoteStrategy('REQUIRED')
```

### setCommentCharacter
设置注释字符,默认注释字符是(#)
```js
writer.setCommentCharacter(c)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| c  | char | 注释字符 |


### setLineDelimiter
设置行定界符,默认是(CRLF)
```js
writer.setLineDelimiter(s)
```

| 参数 | 类型     | 描述   |
|----|--------|------|
| s  | String | 行定界符 |

**行定界符**

| 定界符      | 描述         |
|----------|------------|
| CRLF     | 对应\r\n，默认值 |
| CR       | 对应\r       |
| LF       | 对应\n       |
| PLATFORM | 系统默认       |

**示例**
```js
writer.setLineDelimiter('CRLF')
```

### writeRow
写入一行数据
```js
writer.writeRow(row)
```
| 参数  | 类型              | 描述      |
| ----  |-----------------|---------|
| row  | `Array<String>` | 内容的数组 |


### writeComment
写入注释行
```js
writer.writeComment(comment)
```
| 参数  | 类型  | 描述      |
| ----  | ----  |---------|
| comment  | String | 注释内容 |

**示例**
```js
writer.writeComment('注释内容')
```

### close
关闭输入流
```js
writer.close()
```
