我有一个csv的文件要处理,格式如下吧:
48674530,"Greentech Out, Limited",5200-000-04-13-1,"20/F, Euro Tntre, 21 eux Rd CentralHK","https://www.icris.cr.gov.hk/csci/cnc_comp.do"
最终要处理成:
48674530,
"Greentech Out, Limited"
5200-000-04-13-1
"20/F, Euro Tntre, 21 eux Rd CentralHK"
"https://www.icris.cr.gov.hk/csci/cnc_comp.do"
public class Test { public static void main(String[] args) throws ParseException, Exception { BufferedReader reader = new BufferedReader(new FileReader(new File("D:\\My Files\\Desktop\\bug#9236\\test1.csv"))); while(reader.read() != -1){ String line = reader.readLine(); String[] result = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"); for (String str : result) { System.out.println(str); } /* List list = parseLine(line, true); for(int i = 0; i < list.size(); i++){ System.out.println(list.get(i)); } */ } } private static List parseLine(String src, boolean isNeedTrim) throws IOException { List line = new LinkedList(); src = src.trim(); if (src.length() == 0) return line; StringBuffer stringbuffer = new StringBuffer(); boolean beginWithQuote = false; for (int i = 0; i < src.length(); i++) { char ch = src.charAt(i); if (ch == '\"') { if (beginWithQuote) { i++; if (i >= src.length()) { if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); stringbuffer = new StringBuffer(); } else { ch = src.charAt(i); if (ch == '\"') { stringbuffer.append(ch); } else if (ch == ',') { if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); stringbuffer = new StringBuffer(); beginWithQuote = false; } else { for (int k = i; k < src.length(); k++) { ch = src.charAt(k); if (ch == ',') { break; } else { stringbuffer.append(ch); i++; } } if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); stringbuffer = new StringBuffer(); beginWithQuote = false; continue; } } } else if (stringbuffer.length() == 0) { beginWithQuote = true; } else { for (int k = i; k < src.length(); k++) { ch = src.charAt(k); if (ch == ',') { break; } else { stringbuffer.append(ch); i++; } } if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); stringbuffer = new StringBuffer(); beginWithQuote = false; continue; } } else if (ch == ',') { if (beginWithQuote) { stringbuffer.append(ch); } else { if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); stringbuffer = new StringBuffer(); beginWithQuote = false; } } else { stringbuffer.append(ch); } } if (stringbuffer.length() != 0) { { if (isNeedTrim) line.add(stringbuffer.toString().trim()); else line.add(stringbuffer.toString()); } } return line; } }
public class CSVParser { private static Pattern LINE_PATTERN = Pattern.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,"); public static String[] parseLine(String line) { return parseLine(line, true); } public static String[] parseLine(String line, boolean trimEmptyCell) { String[] retVal = null; if ((line != null) && (line.length() > 0)) { String str; ArrayList cells = new ArrayList(); Matcher mCells = LINE_PATTERN.matcher(line + ","); while (mCells.find()) { str = mCells.group(); str = str.replaceAll("(?sm)\"?([^\"]*(\"{2}[^\"]*)*[^\"]*)\"?.*,", "$1"); str = str.replaceAll("(?sm)(\"(\"))", "$2"); cells.add(str); } boolean allEmpty = true; retVal = (String[]) cells.toArray(new String[0]); for (int i = 0; i < retVal.length; i++) { if (trimEmptyCell) retVal[i] = retVal[i].trim(); if (retVal[i].length() > 0) allEmpty = false; } if (allEmpty) retVal = null; } return retVal; } }
相关推荐
可读取复杂的csv文件,根据引号和逗号等分割读取所需要的数据信息。
此外,如果CSV文件中存在包含逗号的字段(如逗号引号包围的文本),则需要更复杂的解析逻辑,可能需要用到正则表达式库或第三方CSV解析库。 在提供的`ReadCSVFile`源码中,作者可能已经封装了这些功能,包括对复杂...
在日常的数据处理工作中,CSV(逗号分隔值)文件是一种非常常见的数据存储格式。它简单易用,可以方便地在不同的系统之间进行数据交换。然而,在处理CSV文件时,可能会遇到这样的需求:将某些数字列转换为文本形式,...
此外,还可以处理包含逗号、引号等复杂情况的CSV文件,例如使用双引号包裹含有逗号的字段。 对于压缩包子文件"WWW.WEI2008.COM",可能包含了实现这些功能的源代码或示例。解压后,查看源码可以更深入理解CSV文件...
CSV是一种结构化的文本文件,可以看做是二维表,构成规则如下:每一行(“\r\n”标志行结束)对应表格的一行,不同列之间使用逗号分隔;如果列内容中包含逗号,则使用双引号将整列包裹起来;如果列内容中包含双引号,...
在C++编程中,对文件中的数据进行排序并...总之,本项目展示了C++处理文件排序和CSV文件的基本技术,结合了文件I/O、排序算法和自定义比较函数等核心概念。理解并掌握这些知识点对于任何C++开发者来说都是至关重要的。
在嵌入式系统开发中,有时我们需要处理存储在CSV(Comma Separated Values)文件中的数据,例如在STM32F103RCT6这样的微控制器上。CH376S是一款USB接口芯片,用于扩展微控制器的文件系统功能,包括读写SD卡或U盘上的...
在LabVIEW中,我们可以通过编程实现对CSV文件的创建和写入,以便于后续的数据分析和处理。 首先,我们需要了解LabVIEW中的文件I/O(输入/输出)函数。在LabVIEW的函数选板中,通常可以在“字符串”类别下找到与文件...
在这个解析器中,正则表达式被用来高效准确地识别和处理CSV文件中的这些复杂结构。 正则表达式可能包括以下关键部分: - `\s*`: 匹配零个或多个空白字符,用于处理前导或尾随空格。 - `,`: 直接匹配逗号,作为默认...
在CSV解析器中,FSM可以帮助我们识别和处理文件中的不同部分,如字段、记录和分隔符。 以下是这个CSV文件解析器的一些关键知识点: 1. 文件读取:使用C++的`fstream`库来读取和处理CSV文件。`ifstream`对象用于...
- 在读写文件时,确保正确处理文件打开失败、内存不足和其他可能的错误。 - 当读取CSV文件时,如果字段包含逗号或引号,应考虑使用`libcsv`等库,它们能够正确处理这些复杂情况。 - 写入CSV时,注意在必要时对字段...
在VC++6.0中,我们可以使用标准库中的`fstream`类来处理文件操作,包括读取和写入CSV文件。`ifstream`用于读取,`ofstream`用于写入。下面是一些基本的API使用方法: 1. **打开文件**:使用`ifstream`或`ofstream`...
在处理CSV文件时,经常会遇到分隔符问题,因为不同系统或应用可能使用不同的分隔符,如逗号、分号、制表符等。本主题将探讨CSV文件在上传下载过程中可能遇到的分隔符问题以及如何使用ABAP(Advanced Business ...
本文实例讲述了C#读取csv格式文件的方法。分享给大家供大家参考。具体实现方法如下: ...7 文件读写时引号,逗号操作规则互逆。 8 内码格式不限,可为 ASCII、Unicode 或者其他。 9 不支持特殊字符 二、C#读取
在VB.NET 2003环境下处理CSV文件,尤其是对于非英文环境如日文系统,需要注意一些特定的问题。以下是一些关于读取CSV文件的关键知识点: 1. **CSV文件结构**:CSV文件以其简单的结构著称,每行数据由逗号分隔的字段...
它提供了简单易用的API,使得在C#项目中处理CSV文件变得轻松。在NuGet包管理器中,可以搜索并安装"OpenCSV"库,将其添加到你的项目中。 转换过程分为几个步骤: 1. **读取CSV文件**:使用OpenCSV的`CsvReader`类,...
然而,当CSV文件变得非常大时,传统的文本编辑器或电子表格软件可能无法有效地打开或处理它们,可能会导致内存不足或者运行缓慢的问题。因此,"csv大文件打开器"应运而生,这类工具专门设计用于处理大型CSV文件。 ...
在IT行业中,CSV(Comma Separated Values)文件是一种广泛使用的数据存储格式,因其简单、通用而被众多程序和应用程序支持...通过封装这些操作,我们可以创建方便易用的类,使得在C++项目中处理CSV数据变得更加简单。
Qt提供了QTextStream和QFile类来处理文件操作。通过打开CSV文件,逐行读取并解析数据,然后将这些数据插入到QTableWidget的对应单元格中。解析CSV时,通常依据逗号分隔符将一行数据拆分为多个元素。注意,对于包含...
虽然可以使用基本的文件操作函数处理CSV,但一些库如`libcsv`或`csv-parser-cpp`提供了更高级的功能,如自动处理逗号、引号内的分隔符,以及更易于使用的API。 5. **错误处理**: 在处理CSV文件时,一定要检查...