csv文件中字符串替换(csv换行符错误使用造成PHP读取异常)

15 篇文章 0 订阅

csv文件中换行符使用对不同系统有不同的影响,下面介绍一个案例。

前两天收到了几个csv文件,使用PHP提供的 fgetcsv() 函数报内存错误,通过一部分调试,判断原因为换行符异常。

Mac下直接通过系统命令,查看输出,命令如下:head  aaa.csv (输出aaa.csv前十条内容),输出结果是一整串巨长的字符串,貌似换行符未生效。(由于保密原因暂不贴图)

ok,通过了上面的命令,大致了解到了可能造成错误的原因,于是,vim aaa.csv ,果然发现了所有的数据堆成一行,而且多了一些加亮的'^M'标识,经验上来讲,应该是数据导出csv的换行符为 ’\r' 而不是 '\r\n' 或者 '\n',而接下来,通过系统命令,将 '^M' 替换成 '\r\n' 即可。 

解决此问题命令如下:gsed -i 's/^M/\r\n/g' aaa.csv, 其中 '^M' 不是直接输入 '^M',而是使用特殊的方法,mac如下:control按下,连续输入vm。

下面介绍一下此类调试相关的命令:

1.  head -n num  file  或者 tail -n num file 两种命令, 前者展示 file前n行,后者表示 展示 file 后面n行。不加 -n 默认为10;

2.  vim 下替换命令, 进入命令模式,输入 s/str1/str2/g 将所有的str1替换成str2,不加g的话代表只替换第一个。

3.  进入vim模式下替换个人认为是不大可取的方法,文件过大的话,加载也是一个问题,下面提供一个直接在文件目录中替换的方式

linux 下,使用命令 sed -i 's/str1/str2/g' file ,意思为将file中所有的str1替换成str2 。

但是,这条命令在mac有较差的支持,正常使用sed的话需要安装 gnu-sed ,使用brew安装如:brew install gnu-sed。于是上面的命令在Mac中为:gsed -i 's/str1/str2/g' file

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值