图片缩略图

单元格数组到CSV文件[Cell2CSv.m]

version 1.1.0.0 (1.89 KB) by Sylvain Fiedler.
将单元数组写入逗号分隔值文本文件(* .csv)
4.8
49评级

20下载

更新2010年11月03

查看版本历史记录

查看许可协议

这个函数将单元格数组写入csv文件。
它可以处理空单元格、数字单元格、字符单元格、字符串单元格和逻辑单元格。一个数组可以包含所有这些值,但每个单元格只能包含一个值。

csv文件可以通过Excel读取,所以不需要DDE或ActiveX。

引用

Sylvain Fiedler(2021)。单元格数组到CSV文件[Cell2CSv.m](//www.tatmou.com/matlabcentral/fileexchange/4400-cell-array-to-csv-file-cell2csv-m), MATLAB中央文件交换。检索

意见及评分(56.

普拉萨德

亚历山大·汪达尔人

约翰琼斯

vignesh

雅各Peplinski

兴隆鲁

电磁辐射

我定期使用这个函数,它总是很棒。但是现在我遇到了一些问题。我想将不同类型的单元格保存到TXT文件中,当我在MATLAB中打开生成的文本文件时运行良好。但是,如果我打开matlab外部的文件(例如,用记事本),小区的行不作为TXT文件中的单个行分隔。

一个例子:

我想要这样的:
Header1, Header 2, Header 3
Data1、999999、888888
Data2 77777, 66666

但是生成的文本文件是这样的
标题1,标题2,标题3,Data1,999999,888888,Data2,7777,66666

有任何想法吗?非常感谢

minotshing胎盘

Geng Deng.

此功能不适用于逗号的单元格。例如,如果我运行

out = {'ReadMe, Inc.', 'ReadMe2, LLC'};
cell2csv(“\ test.csv”);

由此产生的CSV Fille具有四个单元格,而不是两个。有谁知道如何解决这个问题吗?

弗朗索瓦洛

瓦希德

Avishay Assayag.

挂东

如此有效!

Kahfi Gunardi

珍珠Adinegoro

非常感谢!

弗洛哼哼

Bogdan列为

好简单,但有点慢。
省了我复制代码的麻烦。

可以通过使用'w'而不是在fopen中增强它,而且更快!autoflush非常慢!

看看这个链接:http://blogs.mathworks.com/loren/2006/04/19/high-performance-file-io/

内森齐默曼

这对我不适用于不同专栏尺寸的2D细胞阵列。要解决此问题,我将fprintf更改为以下内容:

尝试
流(datei ' % s ', var {1,});
抓住

结束

例如3d单元阵列

Rafael Rodriguez.

扎克吉尔斯

译文

RD2047.

里卡多

仅供参考:

当我的单元格数组有一个带字符串的行时,我遇到了问题:所有值都被写为“na”,所谓的,因为它们没有验证stringx(x)的所有elsefif的条件。

如果我删除了最后一个else,它会给我一个错误:“错误使用sprintf
功能未为“Cell”输入定义。“

所以我把最后一个else改成

其他的
x ='na';
:

其他的
x = char (x);

它工作。没有更多的“NA”。

谢谢你的脚本。良好的工作;)

夏洛特

法佩雷拉

亚历克斯

杰瑞

我根据Justin和Jan的建议进行了修改也增加了对行向量的支持。金宝app现在快多了。查看更新的文件在//www.tatmou.com/matlabcentral/fileexchange/47055-cell2csv-m

学分归西尔万。

贾斯汀苏

一个非常方便的代码。但是,对于保存大型表来说,它有点慢。
Jan Simon的建议很有帮助。进一步提高其速度的另一种方法是将输出尽可能捆绑到fprintf()。例如,在一次调用中编写整行代码,而不是为每个单元格调用fprintf()。
这两种调整可以将味道时间降低> 60%。

此前

1月

该功能具有很大的改进潜力:
"var = eval(['cellArray{z,s}']);"可以被更快更好的"v = cellArray{z,s};"替换。
“如果尺寸(var,1)== 0”不会捕获[1x0]阵列,而“isempty(v)”则会捕获。

检查Fopen的成功强烈建议避免奇怪的行为。

文档是足够的,函数工作如广告。

伊戈尔

很好的函数,但是从fopen()中检查适当的结果可能更好(只是为了让用户得到更好的错误消息)。

geieraffe

是否有像Manish Mittal在2005年9月15日所写的带有“追加”的版本?
找不到它!
但是会很棒的!我需要精确的这个…只有一个"追加"选项

珍珠

Reza Farrahi Moghaddam

Wouter

CSV2Cell可以通过使用UigetFile和TextScan的组合来完成。

罗伯特。

很好的m脚本。这里是CellStr内容和空单元格的差异:
diff cell2csv.m cell2csv_orig.m
70,73C70,72.
<如果isempty (var)
<继续
<结束
<
---
> %输出值
> fprintf(datei,'%s',var);
>
75C74.
<如果s〜= 1%尺寸(Cellarray,2)
---
> if s ~= size(cellArray, 2)
78,86d76.
<
< %输出值
<如果ischar (var)
< fprintf(datei, '%s', var);
< fprintf(datei, '%s', var{1});
<结束
<
<

艾琳

谢谢,只是使用它转换一个1048576x10单元阵列到csv,花了大约5个小时,但没有崩溃。

Ivan Brezani.

阿纳斯塔西娅

谢谢你的伟大脚本,只是一个备注,我修改了第56行,以便根据某些窗口和Visual Basic程序的要求使用CR / LF终止输出。

流(datei ' \ r \ n ');

它可能值得添加为选项。

海伦陈

到目前为止,它工作得很好:)顺便说一下,你可以使用textscan函数在matlab 7转换CSV到单元阵列

R B

这显然是mathworks.com上另一个cell2cvs的旧版本,应该删除

R B

越野车。在某些情况下打破fprintf

Wouter Rogiest.

我在我的所有Matlab代码中使用了这一点--thanx!但我无法帮助想知道是否有人制作了CSV2Cell?

乔lotz.

很有帮助,谢谢分享!

Kevin Keegan.

有没有代码的代码是它的 - CSv2Cell?我见过C版本,但不是Matlab的版本 - 自己有点麻烦写一个。
谢谢 - 凯文

克里斯·柯蒂斯

这是一个很大的帮助。我很难在细胞阵列周围缠绕我的思想,这是完美的。非常灵活,简单,用户友好。谢谢!

迈克B

根据上面的评论,这是非常棒的。我只是用它来生成文本文件输出,非常完美。

Manish米塔尔

这里是另一个版本的相同文件与追加,覆盖等选项。此外,delimeter的问题是固定的

函数cell2csv(文件名,cellarray,delimiter,模式)
%将单元格数组内容写入*.csv文件。

% CELL2CSV(文件名、cellArray分隔符)

% filename =要保存的文件名。(即。' text.csv ']
% cellarray =数据所在的单元格数组的名称
% delimiter =分隔符,通常为:','(默认)
% mode =指定打开文件的模式。有关详细信息,请参阅fopen()
% list(默认是覆盖,即。' w ')

%由Sylvain Fiedler,Ka,2004年
由Rob Kohr,Rutgers,2005修改% - 改为英语和固定分隔符
如果输入参数个数< 3
分隔符= " ";
结束
如果输入参数个数< 4
模式= ' w ';
结束

datei = fopen(文件名,模式);
对z = 1:尺寸(cellArray, 1)
s = 1:尺寸(cellArray, 2)

var = eval(['cellarray {z,s}'));

If size(var,1) == 0
var ='';
结束

If isnumeric(var) == 1
var = num2str(var);
结束

流(datei var);

如果s〜= size(cellarray,2)
流(datei,分隔符);
结束
结束
流(datei ' \ n ');
结束
文件关闭(datei);

Miklos Argenelan.

P L

除了R k的注释外,将第32-34行更改为:

如果s〜= size(cellarray,2)
fprintf(Datei,Trennzeichen);
结束

R K

因为它是一个CSV,所以应该用逗号作为分隔符。

if nargin<3,trennZeichen = ','

C T

马塞洛西利

太好了,这正是我需要的。

塞吉奥Lucero

伟大的。还需要接受一个不同的分隔符,所以除了第32行,它需要改变第12行
if nargin<3,trennZeichen = ';'

胡安·f·允许

它很简单,它是有效的,不仅可以编写CSV,它可以读取由用户更改“分隔符”创建的格式。第32行的需求和调整:
流(datei trennZeichen);

泰德>

简单有效。

Matlab释放兼容性
创建R2009a
与任何版本兼容
平台的兼容性
视窗 macOS Linux

社区宝藏狩猎

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!