首页 > 其他分享 >csv - 文件内容读取

csv - 文件内容读取

时间:2024-06-13 21:48:10浏览次数:12  
标签:文件 读取 字符 引号 逗号 csv

简单读取

简单读取指的是,文件不包含特殊字符。

读取方式:按行读取,然后按逗号进行拆分,一般只需要注意中文乱码。

标准读取

标准的 csv 文件,应当有这些特点:

  • csv 文件不是按行读取,而是按字符读取;
  • csv 文件每一行,字段总数并不是固定的;
  • csv 文件的字段,允许包含逗号和引号,这时候字段需要用引号圈起来;
  • csv 文件的一行,不等价于一行记录,如果字段中包含换行符,一行记录就会被拆分成多行。

因此,csv 文件的读取,实际上,不能草率地直接按行读取。

  • 读取一个字段,如果首字符是引号,则说明字段值中,可能包含引号;
  • 引号的转义,是两个引号,读取到两个引号,需要转义成一个引号;
  • 读取到“引号+逗号”,则说明当前字段读取结束;
  • 读取到“引号+换行符”,则说明当前记录读取结束;

其中,读取到单引号,但是没有跟逗号或者引号,则说明文档内容有误,但是无需报错,当成单引号正常读取即可。

推荐方案

要读取标准的 csv 文件,其实算法是非常复杂的,因此需要考虑性能问题;

日常使用的时候,如果明确文件不包含特殊字符,就可以进行简单读取;

因此,设计上,可以分为两套工具:一套专注于提高读取效率;一套专注与读取内容准确。

不推荐自己编写专业读取工具

想要设计专业的工具,使用标准的手段进行读取,不要尝试自己编码,因为短期内根本不可能实现。

推荐选用类库:open-csv,csv-reader 等。


问题分析:

如果只考虑到功能实现,按照前面提到的思路,一个字符一个字符地读取,技术上没啥问题,最终自然是能实现;

但是,编码实现过程中,必定用到 StringBuilder,如果一个字符一个字符地追加,会造成严重的性能浪费;


关键代码如下,如果你已经准备编码,就会发现算法难度极高。

想要优化得好,最终的代码,只会比 BufferedReader 复杂,除非你有很多时间,不然不推荐自己写。

class Test{

    // 最终会用到的应当是一个字符流
    public static Reader reader;
	
	// 考虑到性能,必定会用到缓存,一次读取一大段
    public static char[] buf;

    public static void main(String[] args) throws IOException {
        len = reader.read(buf);
		
		// 这个函数必定被用到	
        new StringBuilder().append(buf, 0, len);
    }
}

标签:文件,读取,字符,引号,逗号,csv
From: https://www.cnblogs.com/chenss15060100790/p/18246798

相关文章

  • 【Go】用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库
    本文档主要描述通过https://github.com/mutecomm/go-sqlcipher生成和读取SQLCipher加密数据库以及其中踩的一些坑用go去生成读取SQLCipher数据库用gorm去读取SQLCipher数据库在生成后分别用DBeaver、dbbrowser和sqlcipher读取SQLCipher数据库,基础操作见......
  • c++防止头文件重复
    在C++的头文件中,为了防止重复包含,需要使用预处理指令#pragmaonce或者传统的条件编译方式。下面分别详细说明这两种方式的写法及作用:#pragmaonce使用#pragmaonce指令:#pragmaonce是一种简便的方式,可以确保头文件只被编译一次。在头文件的开头加入#pragmaonce即可,示例......
  • LockHunter 文件锁解锁器,删除无法被删除的文件或文件夹
    这是一款免费工具,可用于删除被您不知道的某些东西阻止的文件。LockHunter可用于对抗恶意软件和其他无缘无故阻止文件的程序。与其他类似工具不同,它会将文件删除到回收站中,因此如果误删除,您可以恢复它们。主要特征显示锁定文件或文件夹的进程为您提供有关该过程的详细信息允......
  • 需求虽小但是问题很多,浅谈JavaScript导出excel文件
    最近我在进行一些前端小开发,遇到了一个小需求:我想要将数据导出到Excel文件,并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数,数组的第一行是表头。在导出的过程中,要能够确保避免出现中文乱码的情况。另外,考虑到数组中可能包含回车、逗号、换行符等......
  • el-upload拍照上传多个文件报错 ERR_UPLOAD_FILE_CHANGED问题
    最近同事使用el-upload上传图片时出现一个问题,连续拍照多个图片的时候,循环调用接口上传会报错:ERR_UPLOAD_FILE_CHANGED,网上找了很多方案没有解决,下面是我自己的解决过程。1.问题描述我们用的套壳Android,网页发布在远程服务器,Android壳安装在ipad上前端用的组件是el-upload,点......
  • 文件IO,创建编号为ABC三个线程,三个线程循环打印自己的编号,要求打印出来的结果必须是ABC
    第二个,拷贝图片#include<myhead.h>typedefstruct{ constchar*srcfile; constchar*destfile; intlen;}info;void*task1(void*arg){ infobuf=*((info*)(arg)); //打开这两个文件,只读的形式 intfd=-1; if((fd=open(buf.srcfile,O_RDONLY))==-1) {......
  • Linux结业测试题,旨在检测ip网络配置,文件权限等基础
    Linux期末结业考试一、评分方式(总分100分,理论40分在职教云考试)主要涉及的知识和技能点*分值权重*Linux的最小安装10%激活网络,并正确设置ip地址10%克隆1台机器,并正确设置ip地址10%SSH免密互信服务10%文件和目录操作10%权限操作10%二、项目步骤及实现linux虚拟机安装(1)通......
  • linux中FTP文件传输服务
    ftp是一种文件传输协议:用来上传和下载,实现远程共享文件,和统一管理文件。工作原理:用于互联网上的控制文件的双向传输是一个应用程序。工作在TCP/IP协议簇的,其传输协议是TCP协议提高文件传输的共享性和可靠性,使用C/S模式的工作方式连接时同时处理服务器和客户端的连接命令和数......
  • 【解决】无法打开该文件因为设备正在使用
    当我把手机(苹果14)用数据线连到电脑上,想往电脑传输文件时,总是显示“文件正在使用中”,“设备正在使用”等,让我稍后再试。试了以下几种办法,最终在我不懈努力下成功了1.重启资源管理器,如下图所示2.重新连接手机和电脑3.刷新界面试了以上几种办法,发现总结起来还是一句话:重启......
  • Python简单实现:读取文件夹并数字排序
    python中os.listdir()方法用于返回指定的文件夹包含的文件或文件夹的名字的列表importospath="../data/materials/test/"path_list=os.listdir(path)print(path_list)输出['1.jpg','10.jpg','11.jpg','12.jpg','13.jpg',......