`

CsvParser

    博客分类:
  • Java
 
阅读更多
import java.util.ArrayList;

public class CsvParser {
	
	public static final String SEPARATOR = ",";
	public static final char QUOTE = '"';
	
	// parse the csv line into an ArrayList of values
	public static ArrayList parse(String line) throws Exception {
		ArrayList list = null;
		
		if (line == null) {
			// return null if input line is null
		}
		else {
			list = new ArrayList();
			
			if (line.length() == 0) {
				// return an empty line if the input is an empty line
				list.add(line);
			}
			else {
				StringBuffer sb = new StringBuffer();
				
				String[] a = line.split(SEPARATOR);
				for (int i=0; i<a.length; i++) {
					sb.append(a[i]);
					
					// count the no. of double quote
					int count = 0;
					for (int m=0; m<sb.length(); m++) {
						if (sb.charAt(m) == QUOTE) {
							count++;
						}
					}
					
					if (count > 0) { // has double-quote
						if (count % 2 == 0) { // complete token
							sb = new StringBuffer(sb.toString().trim());
							
							if (sb.charAt(0) == QUOTE && sb.charAt(sb.length()-1) == QUOTE) {
								sb.deleteCharAt(sb.length()-1); // remove trailing double-quote
								sb.deleteCharAt(0); // remove leading double-quote
								
								for (int h=0; h<sb.length(); h++) {
									if (sb.charAt(h) == QUOTE) {
										int nextPos = h+1;
										if (nextPos < sb.length() && sb.charAt(nextPos) == QUOTE) { // if escaped by another double-quote
											sb.replace(h, nextPos+1, String.valueOf(QUOTE)); // replace escaped double-quotes
										}
										else {
											throw new Exception("a literal double-quote should be escaped by another double-quote");
										}
									}
								}
								
								// add to list
								list.add(sb.toString());
								
								// reset buffer
								sb.setLength(0);
							}
							else {
								throw new Exception("field containing commas and double-quotes must be quoted");
							}
						}
						else { // incomplete token
							if (i < a.length-1) {
								// append the removed separator
								sb.append(SEPARATOR);
								
								// continue to append the next token
							}
							else {
								// no more token left
								throw new Exception("Incomplete token");
							}
						}
					}
					else { // no double quote
						// add to list
						list.add(sb.toString().trim());
						
						// reset buffer
						sb.setLength(0);
					}
				}
			}
		}
		
		return list;
	}

	
}

 

分享到:
评论

相关推荐

    CSVParser:解析 CSV 文件。-开源

    CSVParser 是一个用于解析逗号分隔值(CSV)文件的工具,常见于数据处理、数据分析和文件交换中。在编程领域,CSV 格式因其简单性和通用性而被广泛采用。CSVParser 提供了一个方便的接口,使得开发者能够轻松地读取...

    CSVParser:这是一个 Java CSV 解析器,目前仅将您的 csv 输出到控制台

    CSVParser 是一个基于 Java 的工具,专门用于解析逗号分隔值(CSV)文件。CSV 格式是一种常见的数据交换格式,广泛应用于数据分析、数据库导入导出和电子表格软件之间。这个 Java 库提供了一个简单的方法,将 CSV ...

    CsvParser.zip

    本示例“CsvParser.zip”提供了一个解决方案,它利用了Poco库来处理中文字符,并确保在读取和写入CSV文件时正确地使用UTF-8编码,从而避免乱码。 首先,我们来看“Qt 中文乱码 UTF-8”这个问题。在Qt框架中,如果...

    java 解析csv文件例子,csv文件 中文乱码问题

    try (CSVParser parser = CSVParser.parse(new File(filePath), StandardCharsets.UTF_8, CSVFormat.DEFAULT.withFirstRecordAsHeader())) { for (CSVRecord record : parser) { // 处理每一行的记录 for ...

    Qt解析CSV文件

    在描述中提到的"CSVparser类"可能是项目中自定义的一个类,用于读取和解析CSV文件。通常,这个类会逐行读取文件,然后根据逗号分隔符分割每一行,将数据存储在某种结构(如QStringList或std::vector)中。 接下来,...

    读取csv文件中指定行列的数据

    CSVParser parser = CSVParser.parse(new File("path_to_your_csv_file.csv"), CSVFormat.DEFAULT); for (CSVRecord record : parser) { int rowIndex = record.getRecordNumber(); if (rowIndex == ...

    csvparser:Visual Studio CMake演示项目和GitHub集成

    csvparser:Visual Studio CMake演示项目和GitHub集成

    CSVParser

    这是一个CSV格式文件的解析器,包括对引号逗号的处理方式,完全兼容Microsoft excel生成的CSV文件,就是说只要是excel保存的CSV格式的文件,单元内可以任意含有引号逗号等特殊字符,支持Header(field name)。...

    jp.coe.mod.CSVParser:coffeescript CSVParser

    【标题】"jp.coe.mod.CSVParser:coffeescript CSVParser" 是一个使用CoffeeScript编写的CSV解析器,主要适用于JavaScript环境。CSV(Comma Separated Values)是一种常见的数据存储格式,常用于导入和导出数据到电子...

    CSVParser:使用 Node.JS 构建的 CSV 解析器,可以输出嵌套的 JSON 对象

    CSVParser 是一个基于 Node.js 的库,专门设计用于解析 CSV(逗号分隔值)文件,并将解析结果转换成嵌套的 JSON 对象。在处理大量结构化数据时,CSV 格式因其简洁和易读性而被广泛采用。然而,CSV 文件的数据结构...

    csvParser:简单的CSV解析与工人的实现

    csvParser 简单的CSV解析与工人的实现怎么跑npm运行开始例子出来$ npm run startWelcome to the Tab/Comma seperate validatorWhere is the file located?C:\Users\chatu\Desktop\csvSample.txtIs the file format ...

    csvParser:使用 FSM 的 csv 文件解析器

    csvParser 使用状态机实现的csv文件解析器。 特性 简单轻量 使用状态机实现 提供两种模式取csv数据:回调函数和行列模式 使用接口方式实现API 支持Excel方式的csv格式 单元格支持多行 单元格内容可以使用引号,也可以...

    cocos2dx解析CSV

    `CSVParser.cpp`包含了实现CSV解析功能的具体代码,而`CSVParser.h`则声明了相关的类和函数,供其他模块调用。为了在Cocos2d-x中解析CSV,我们可以创建一个名为`CSVParser`的类,该类提供解析CSV文件的方法。 在`...

    csv-parser:快速,仅标头,经过广泛测试的C ++ 11 CSV解析器

    CSV解析器 ...CsvParser parser = CsvParser(std::cin) .delimiter( ' ; ' ) // delimited by ; instead of , .quote( ' \' ' ) // quoted fields use ' instead of " .terminator( ' \0 ' ); // termina

    CSVParser:上载.csv文件,并将其显示为可排序的表格

    CSVParser 上载.csv文件,并将其显示为可排序的表格。通过角度对上传的CSV文件进行排序的概念证明应该注意的是,在这是一个完成的项目之前,还有很多事情要做。 检查问题部分以获取更多信息!

    CSV Parser

    4. CSVParser API:在编程环境中,例如Java,我们可以使用CSVParser库(如Apache Commons CSV或OpenCSV)来解析CSV文件。这些库提供了API接口,如`parse()`方法,用于读取文件,`Record`对象用于存储一行数据,以及`...

    commons-csv-1.8-bin.zip

    CSVParser parser = new CSVParser(reader, format)) { for (CSVRecord record : parser) { String column1 = record.get("Column1"); String column2 = record.get(1); // 如果没有使用header,可以通过索引...

    Parser:读取 CSV 文件

    CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(new FileReader("data.csv")); for (CSVRecord record : parser) { String name = record.get("姓名"); int age = Integer.parseInt(record.get("年龄...

    java读取csv格式文件

    CSVParser parser = new CSVParser(reader, csvFormat); ``` 3. **解析CSV记录**: `CSVParser`对象包含了一系列的`CSVRecord`,每个`CSVRecord`代表文件中的一行。我们可以遍历这些记录,获取每个字段的值: `...

    读取创建CSV文件并自动解析文件编码方式

    CsvParser parser = new CsvParser(settings); try { parser.parse(new FileReader("example.csv")); // 处理解析后的数据 } catch (FileNotFoundException | TextParsingException e) { e.printStackTrace();...

Global site tag (gtag.js) - Google Analytics