Tag: csv

我应该使用哪种数据结构从CSV中搜索字符串?

我有一个csv文件,有近200000行,包含两个列 – 名称和作业。 然后用户输入一个名称,比如user_name,我必须搜索整个csv以查找包含模式user_name的名称,最后将输出打印到屏幕。 我在Java中使用ArrayList实现了这一点,我将整个名称从csv放到ArrayList中,然后在其中搜索模式。 但在这种情况下,搜索的总时间复杂度为O(n)。 Java中是否有任何其他数据结构可用于执行o(logn)搜索或比ArrayList更高效的搜索? 顺便说一句,我不能使用任何数据库方法。 如果我可以用任何其他语言建立一个良好的数据结构来实现我的目标,那么请向我推荐一下吗? 编辑 – 输出应该是csv中包含模式user_name作为最后一部分的名称。 例如:如果我的输入是“儿子”,那么它应该返回“jackson”等。 现在我到目前为止所做的是将csv的name列读取到字符串ArrayList,然后读取ArrayList的每个元素并使用正则表达式(Java的模式匹配器)来查看该元素是否具有user_name作为最后一部分。 如果是,则打印出来。 如果我在multithreading环境中实现它,它会增加我的程序的可伸缩性和性能吗?

Apache tika检测到csv的mime类型不正确

我使用excel创建了.csv文件,并使用apache tika编写了以下代码: public static boolean checkThatMimeTypeIsCsv(InputStream inputStream) throws IOException { BufferedInputStream bis = new BufferedInputStream(inputStream); AutoDetectParser parser = new AutoDetectParser(); Detector detector = parser.getDetector(); Metadata md = new Metadata(); MediaType mediaType = detector.detect(bis, md); return “text/csv”.equals(mediaType.toString()); } public static void main(String[] args) throws IOException { System.out.println(checkThatMimeTypeIsCsv(new FileInputStream(“Data.csv”))); } 但它返回false ‘。 Tika这么糟糕还是我错过了什么?

Java中的Saxon:用于CSV到XML的XSLT

大部分继续从这个问题: XSLT:CSV(或平面文件,或纯文本)到XML 所以,我从这里有一个XSLT: http : //andrewjwelch.com/code/xslt/csv/csv-to-xml_v2.html 它将CSV文件转换为XML文档。 它在命令行上与以下命令一起使用时执行此操作: java -jar saxon9he.jar -xsl:csv-to-xml.csv -it:main -o:output.xml 所以现在问题变成了: 我如何在Java代码中执行此操作? 现在我的代码看起来像这样: TransformerFactory transformerFactory = TransformerFactory.newInstance(); StreamSource xsltSource = new StreamSource(new File(“location/of/csv-to-xml.xsl”)); Transformer transformer = transformerFactory.newTransformer(xsltSource); StringWriter stringWriter = new StringWriter(); transformer.transform(documentSource, new StreamResult(stringWriter)); String transformedDocument = stringWriter.toString().trim(); ( Transformer是net.sf.saxon.Controller一个实例。) 命令行上的技巧是指定“-it:main”以指向XSLT中的命名模板。 这意味着您不必为源文件提供“-s”标志。 问题再次出现在Java方面。 我在哪里/如何指定“-it:main”? 不这样做会打破其他不需要指定的XSLT吗? 我是否必须在每个XSLT文件中命名每个模板“main?” 鉴于Transformer.transform()的方法签名,我必须指定源文件,那么这不能打败我在搞清楚这个问题时所取得的所有进展吗? 编辑:我发现s9api隐藏在saxon9he.jar中,如果有人正在寻找它。

搞砸了CSV会导致exception

我想我发现了一个bug。 或许它不是,但Super CSV无法很好地处理。 我正在使用MapReader解析包含41列的CSV文件。 但是,我正在获得CSV – 以及给我CSV的网络服务混乱了一行。 “标题”行是制表符分隔的行,包含41个单元格。 而“错误的行”是一个带有36个单元格的制表符分隔行,内容没有任何意义。 这是我正在使用的代码: InputStream fis = new FileInputStream(pathToCsv); InputStreamReader inReader = new InputStreamReader(fis, “ISO-8859-1″); ICsvMapReader mapReader = new CsvMapReader(inReader, new CsvPreference.Builder(‘”‘,’\t’,”\r\n”).build()); final String[] headers = mapReader.getHeader(true); Map row; while( (row = mapReader.read(headers)) != null ) { // do something } 我在上面提到的行中执行mapReader.read(headers)时遇到exception。 这是例外: org.supercsv.exception.SuperCsvException: the nameMapping array and the […]

JAVA – 将CSV导入ArrayList

我正在使用StringTokenizer尝试将导入CSV文件导入Arraylist : public class Test { public static void main(String [] args) { List datalist = new ArrayList(); try { FileReader fr = new FileReader(“c:\\temp.csv”); BufferedReader br = new BufferedReader(fr); String stringRead = br.readLine(); while( stringRead != null ) { StringTokenizer st = new StringTokenizer(stringRead, “,”); String docNumber = st.nextToken( ); String note = st.nextToken( […]

OpenCSV CSV到JavaBean

如果我有一个非原始公共成员的类,并且我想用OpenCSV从CSV文件中填充它们,我该怎么做? 我注意到OpenCSV有一些与PropertyDescriptors相关的受保护成员 因此,假设我有一个具有地址成员的Person类,我的CSV文件包含每个人的详细信息,包括他们的地址。 Person{ private String name; private Address al public void setAddress(Address a){..} public void setName(String name){..} } Addess{ private String line1; private String line2; private String postCode; . . . } CSV文件: NAME | ADDR1 | ADDR2 | PCODE … John Smith |Some place | Some town | NW234 谢谢, 一个

如何在Java中合并CSV文件

我的第一个csv文件看起来像这样包含标题(标题仅包含在顶部而不是每个条目之后): NAME,SURNAME,AGE Fred,Krueger,Unknown …. n records 我的第二个文件可能如下所示: NAME,MIDDLENAME,SURNAME,AGE Jason,Noname,Scarry,16 …. n records with this header template 合并的文件应如下所示: NAME,SURNAME,AGE,MIDDLENAME Fred,Krueger,Unknown, Jason,Scarry,16,Noname …. 基本上,如果标头不匹配,则应根据该顺序在原始标头及其值之后添加所有新标题标题(列)。 更新: 上面的CSV变得更小,所以我可以说明我想要实现的目标,实际上CSV文件是在此之前生成的一步(合并),最多可以是100列 有谁知道我该怎么做? 我很感激任何帮助

是否有一种简单的方法来输出逐列CSV?

我正在尝试将多个不同长度的数据列表输出到CSV文件。 每个列表应该是输出CSV文件中的一列。 做事的直接方式有吗? 如果我将每个列表作为一行输出,我只是遍历每个列表并在结束时输出一个返回,但是这种方法在按列工作时不起作用。 我想要一次又一次地遍历所有列表,逐项递增计数器,但这也会失败,因为有些列表比其他列表长。 为了解决这个问题,我必须在每次迭代时检查计数器是否超过每个列表的末尾,这在计算方面相当昂贵。 谢谢你的任何想法!

从特定CSV文件读取数据并将其显示在JTable中

关于此问题: 从CSV文件中读取数据并将其显示在JTable中 我试图调整这个问题的程序,以使其符合我的需要,但它犯了错误。 我希望程序显示位于项目根目录中的文件(因此我必须编写File DataFile = new File(“res.csv”); )这就是全部。 问题是它只显示2行,当应该显示4行时。 这是代码: import java.util.*; import java.awt.event.*; import javax.swing.*; import java.awt.BorderLayout; import java.awt.*; import javax.swing.border.EmptyBorder; import java.io.*; import javax.swing.table.*; public class T1Data extends JPanel { private final JTable table; public T1Data() { super(new BorderLayout(3, 3)); this.table = new JTable(new MyModel()); this.table.setPreferredScrollableViewportSize(new Dimension(700, 70)); this.table.setFillsViewportHeight(true); JPanel ButtonOpen = […]

读取CSV中的换行符,它在Spring批处理的FlatfileItemReader中的文件中引用

我试图用FlatFileItemReader解析CSV文件。 此CSV包含一些引用的换行符,如下所示。 email, name abc@z.com, “NEW NAME ABC” 但是这个解析失败了,必填字段为2但实际为1。 我在FlatFileReader配置中缺少什么?