14.1.3简单文件I/O

这个拯救加载命令允许以各种格式向磁盘文件写入数据并从中读取数据。写入的文件的默认格式拯救可以使用函数控制命令save_default_optionssave_precision.

例如,下面的代码创建了一个3乘3的矩阵,并将其保存到文件中myfile.mat’.

A=[1:3;4:6;7:9];保存myfile.mat A

一旦一个或多个变量被保存到文件中,它们就可以使用加载命令

加载myfile.matA-|A=-|-|1 2 3-|4 5 6-|7 8 9
 
: save file
: save options file
: save options file v1 v2
: save options file -struct STRUCT
: save options file -struct STRUCT f1 f2
: save - v1 v2
: str = save ("-", "v1", "v2", …)

保存命名变量v1, v2,…,在文件中文件.

特殊文件名-可用于以字符串形式返回变量的内容。如果未列出变量名,Octave会将所有变量保存在当前作用域中。否则,可以使用完整的变量名或模式语法来指定要保存的变量。如果-结构体的字段标量结构体保存为ifthey-are变量,并具有相应的字段名。这个-结构体参数可以与特定的字段名组合f1, f2,…仅将某些字段写入文件。

的有效参数拯救命令在下表中列出。修改输出格式的参数将覆盖从指定的格式save_default_options.

如果使用函数形式调用save

save(“-option1”,…,“file”,“v1”,…)

然后param, 文件,和变量名参数(v1,…)必须指定为字符串。

如果使用的文件名为-,如果nargoutis为0,则将输出写入stdout,否则以字符串形式返回输出。

追add

附加到目标,而不是覆盖。

-ascii

将矩阵保存在不带标题或任何其他信息的文本文件中。矩阵必须是二维的,并且只有任何复杂值的实部才会写入文件。数字以单精度格式存储,并用空格分隔。的其他参数-ascii格式为

double

以双精度格式存储数字。

-参数卡

用制表符分隔数字。

二进制的

将数据保存为Octave的二进制数据格式。

-浮点二进制

以Octave的二进制数据格式保存数据,但仅使用单精度。使用此格式只有如果您知道所有要保存的值都可以用单精度表示。

-hdf5

将数据保存在HDF5format(HDF5是一种免费的、可移植的二进制格式,从伊利诺伊大学的国家超级计算应用中心开发。)只有当Octave是通过链接HDF5图书馆。

-浮动-hdf5

将数据保存在HDF5格式,但仅使用单一精度。使用此格式只有如果您知道所有要保存的值都可以单精度显示。

文本

以Octave的文本数据格式保存数据。默认

-v7.3
-V7.3
-7.3

Octave确实但在中实现节约MATLAB的v7.3二进制数据格式。

-v7
-V7
-7
-mat7二进制

将数据保存在MATLAB的v7二进制数据格式。

-v6
-V6
-6
小地毯
-mat二进制

将数据保存在MATLAB的v6二进制数据格式。

-v4
-V4
-4
-mat4二进制

将数据保存在MATLAB的v4二进制数据格式。

拉链
z

使用gzip算法压缩文件。这适用于在Octave之外使用gzip压缩的文件,并且gzip也可以用于转换文件以实现向后兼容性。只有当Octave是使用指向zlib库的链接构建的时,此参数才可用。

要保存的变量列表可以使用包含以下特殊字符的通配符模式(glob模式):

?

匹配任意单个字符。

*

匹配零个或多个字符。

[ 列表]

匹配指定的字符列表列表.如果第一个特征!^,匹配除指定字符以外的所有字符列表。例如,图案[a-zA-Z]将匹配所有小写和大写字母字符。

使用时,字段名称规范中也可能使用通配符-结构体修饰符(但不在结构体名称本身中)。

使用时除外MATLAB二进制数据文件格式或-ascii格式,保存全局变量也会保存变量的全局状态。如果稍后使用“”还原变量加载,它将作为全局变量重新存储。

用例

命令

保存-二进制数据a b*

保存变量和所有以'开头的变量b到文件数据以Octave的二进制格式。

详见: 加载, save_default_options, save_header_format_string, save_precision, dlmread, csvread, fread.

有三个函数可以修改的行为拯救.

 
: val = save_default_options ()
: old_val = save_default_options (new_val)
: old_val = save_default_options (new_val, "local")

查询或设置内部变量,该变量指定的默认参数拯救命令,并定义默认格式。

默认值为文本(Octave自己的基于文本的文件格式)。详见的文档拯救命令进行其他选择。

当从具有的函数内部调用时地方的参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: 拯救, save_header_format_string, save_precision.

 
: val = save_precision ()
: old_val = save_precision (new_val)
: old_val = save_precision (new_val, "local")

查询或设置内部变量,该变量指定以文本格式保存数据时要保留的位数。

默认值为17,这是无损保存和恢复IEEE-754双值所需的最小值;对于IEEE-754单个值,最小值为9。如果文件大小是一个问题,那么最好选择二进制格式来保存数据,而不是降低保存值的精度。

当从具有的函数内部调用时地方的参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: save_default_options.

 
: val = save_header_format_string ()
: old_val = save_header_format_string (new_val)
: old_val = save_header_format_string (new_val, "local")

查询或设置内部变量,该变量指定用于在Octave保存的文本格式数据文件开头写入的注释行的格式字符串。

格式字符串被传递到strftime并且必须以字符“”开头#,并且不包含换行符。如果的值save_header_format_string是空字符串,头注释是从文本格式的数据文件中发出的。默认值为

#从Octave VERSION创建,%a%b%d%H:%M:%S%Y%Z<USER@HOST>

当从具有的函数内部调用时地方的参数,则该变量会为函数及其调用的任何子程序在本地进行更改。退出函数时将恢复原始变量值。

详见: strftime, save_default_options.

 
: load file
: load options file
: load options file v1 v2 …
: S = load ("options", "file", "v1", "v2", …)
: load file options
: load file options v1 v2 …
: S = load ("file", "options", "v1", "v2", …)

加载命名变量v1, v2,…,来自文件文件.

如果未指定任何变量,则将加载文件中找到的所有变量。与一样拯救,要提取的变量列表可以是全名,也可以使用模式语法。文件的格式是自动检测到的,但可以通过提供适当的参数来覆盖。

如果使用函数形式调用load

load(“-option1”,…,“file”,“v1”,…)

然后param, 文件,和变量名参数(v1,…)必须指定为字符串。

如果一个未符号为全局的变量是在具有相同名称的全局符号已经存在的情况下从文件中加载的,则会将其加载到全局符号表中。此外,如果一个变量在文件中符号为全局,并且存在局部符号,则局部符号会移动到全局符号表中,并从文件中给定值。

如果使用单个输出参数调用,Octave将返回数据,而不是在符号表中插入变量。如果数据文件只包含数字(制表符或空格分隔的列),则会返回一个值矩阵。否则加载返回一个结构体,其成员与文件中变量的名称相对应。

这个加载命令可以读取以Octave的文本和二进制格式存储的数据,以及MATLAB的二进制格式。如果使用zlibsupport编译,它还可以加载gzip压缩文件。它将自动检测文件类型,并从不同的浮点格式进行转换(目前只有IEEE big和little endian,但未来可能会添加其他格式)。

的有效参数加载下表中列出了。

武力

此参数可用于向后兼容性,但会被忽略。Octave现在用文件中相同名称的变量覆盖当前内存中的变量。

-ascii

强制Octave假定文件包含文本格式的数字列,没有任何标头或其他信息。文件中的数据将加载为单个数字矩阵,该矩阵具有从文件名称派生的变量名称。

二进制的

强制Octave假定文件为Octave的二进制格式。

-hdf5

强制Octave假定文件在HDF5format(HDF5是一种免费的、可移植的二进制格式,从伊利诺伊大学国家超级计算应用中心开发。)请注意,Octave只能读取HDF5从其自身创建的文件拯救或与MATLABs-v7.3参数(保存在HDF5format此格式仅在Octave是通过链接构建的时可用HDF5图书馆。

进口

此参数可用于向后兼容性,但会被忽略。Octave现在可以支持多维HDF数据,如果变量名是无效的Octave标识符,则可以自动修改变量名。

文本

强制Octave假定文件为Octave的文本格式。

-v7.3
-V7.3
-7.3

强制Octave假定文件在MATLAB的v7.3二进制数据格式。从于v7.3格式是基于HDF5的格式,这些文件通常也可以使用-hdf5参数注意Octave不能当前以此格式保存。

-v7
-V7
-7
-mat7二进制

强制Octave假定文件在MATLAB的版本7二进制格式。

-v6
-V6
-6
小地毯
-mat二进制

强制Octave假定文件在MATLAB的版本6二进制格式。

-v4
-V4
-4
-mat4二进制

强制Octave假定文件在MATLAB的版本4二进制格式。

详见: 拯救, dlmwrite, csvwrite, 写入文件.

 
: str = fileread (filename)
: str = fileread (filename, param, value, …)

阅读的内容filename并将其作为字符串返回。

param, value是可选的参数和值对。有效参数包括:

编码

指定从文件中读取时使用的编码。这是一个有效编码标识符的字符串。默认为utf-8.

详见: fopen, fread, fscanf, 导入数据, 文本扫描, 类型.

 
: fmtstr = native_float_format ()

以字符串形式返回本机浮点格式。

可以以类似于的方式将数据写入文件disp用于将数据写入屏幕的函数。这个fdisp工作原理就像disp除了它的第一个参数是从创建的文件pointerasfopen。例如,以下代码写入数据myfile.txt’.

fid=fopen(“myfile.txt”,“w”);fdisp(fid,“3/8是”);fdisp(fid,3/8);fclose(fid);

详见打开和关闭文件,了解如何使用的详细信息fopenfclose.

 
: fdisp (fid, x)

显示的值x在溪流上fid.

例如

fdisp(stdout,“pi的值是:”),fdisp

请注意,的输出fdisp总是以换行符结尾。

详见: disp.

Octave还可以读取和写入矩阵文本文件,如命令分隔列表。

 
: dlmwrite (file, M)
: dlmwrite (file, M, delim, r, c)
: dlmwrite (file, M, key, val …)
: dlmwrite (file, M, "-append", …)
: dlmwrite (fid, …)

编写数字矩阵M到文本文件文件使用限幅器。

文件应该是从给定的文件名或可写文件IDfopen.

参数熟食店指定用于分隔行中值的分隔符。如果未指定分隔符,则使用逗号字符,isused。

的值r指定要添加到文件开头的仅限分隔符的行数。

的值c指定每行数据前要加的分隔符数。

如果参数追add的末尾文件.

此外,以下关键字-值对可能会出现在参数列表的末尾:

追add

任何一个on详见追add在上面

分隔符

详见熟食店在上面

换行符

用于分隔每一行的字符。此参数有三种特殊情况。unix被更改为n,pc被更改为\r\nmac被更改为r。任何其他值都直接用作换行符。

roffset

详见r在上面

棺材

详见c在上面

精确

写入文件时要使用的精度。它可以是一个格式字符串(如fprintf所用),也可以是多个有效数字。

dlmwrite(“file.csv”,整形(1:16,4,4));
dlmwrite(“file.tex”,a,“delimiter”,“&”,“newline”,“\n”)

详见: dlmread, csvread, csvwrite.

 
: data = dlmread (file)
: data = dlmread (file, sep)
: data = dlmread (file, sep, r0, c0)
: data = dlmread (file, sep, range)
: data = dlmread (…, "emptyvalue", EMPTYVAL)

从文本文件中读取数字数据文件它使用分隔符九月数据值之间。

如果九月未定义,字段之间的分隔符从文件本身确定。

可选标量参数r0c0定义要读取的数据的起始行和列。这些值从零开始索引,即,第一数据行对应于零的索引。

这个范围参数指定读取哪些数据元素。参数的第一种形式是包含左上角和右下角的4元素向量[R0,C0,R1,C1]其中索引是基于零的。指定最后一列——相当于终止索引时--使用值Inf。或者,aspreadsheet样式的表单,例如A2..Q15T1:AA5可以使用。最低字母索引A.指第一列。最低的行索引为1。

文件应该是从给定的文件名或文件idfopen。在较低的情况下,读取文件直到到达文件末尾。

这个空值参数可用于指定用于填充空字段的值。默认值为零。请注意,任何非数字值(如文本)也会被替换为空值.

详见: csvread, 文本扫描, dlmwrite.

 
: csvwrite (filename, x)
: csvwrite (filename, x, dlm_opt1, …)

编写数字矩阵x到文件filename不可分数值(CSV)格式。

此函数等效于

dlmwrite(filename, x, ",", dlm_opt1, ...)

任何可选参数都直接传递给dlmwrite详见dlmwrite).

详见: csvread, dlmwrite, dlmread.

 
: x = csvread (filename)
: x = csvread (filename, dlm_opt1, …)

读取逗号分隔值(CSV)文件filename进入矩阵x.

注意:只能读取包含数字数据的CSV文件。

此函数等效于

x=dlmread(filename, "," , dlm_opt1, ...)

任何可选参数都直接传递给dlmread详见dlmread).

详见: dlmread, 文本扫描, csvwrite, dlmwrite.

中的格式化数据也可以从文本文件中读取或写入。

 
: [a, …] = textread (filename)
: [a, …] = textread (filename, format)
: [a, …] = textread (filename, format, n)
: [a, …] = textread (filename, format, prop1, value1, …)
: [a, …] = textread (filename, format, n, prop1, value1, …)

此函数已过时。使用文本扫描相反

从文本文件中读取数据。

文件filename根据读取和解析format。该函数的行为类似strread除了它通过解析文件而不是字符串来工作。详见的文档strread详细信息。

除了支持的参数之外strread,此函数还支持两个:

  • 头线:第一个value的行数filename被跳过。
  • endofoline:指定单个字符或\r\n。如果没有给定值,则将从文件中推断出该值。如果设置为(空字符串)EOL作为分隔符被忽略。

可选输入n(格式重复计数)指定要使用格式字符串的次数或要读取的行数,以读取时先发生的为准。前者相当于要求数据输出向量的长度N注意,当读取具有引用多行的格式字符串的文件时,n应该是要读取的行数,而不是字符串使用的格式数。

如果格式字符串为空(不仅仅是被省略),并且文件只包含数字数据(不包括头行),textread将返回一个矩形矩阵,其列数与文件第一行数据上的数字字段数相匹配。空字段将作为零值返回。

示例:

假设数据文件如下:1 a 2 b 3 c 4 d 5 e
[a,b]=textread(f,“%f%s”)返回两列数据,一列具有双精度,另一列为cellstr数组:a=[1;2;3;4;5]b={“a”;“b”;“c”;“d”;“e”}
[a,b]=textread(f,“%f%s”,3)(将数据读取到两个culum中,尝试使用格式字符串三次)返回a=[1;2;3]b={“a”;“b”;“c”}
使用如下数据文件:1 a 2 b[a,b]=textread(f,“%f%s”,2)返回a=1和b={“a”};即该格式字符串仅被使用一次,因为该格式字符串指的是数据文件的2行。要获得2x1个数据输出列,请指定N=4(包含所有指定数据的数据行数),而不是2。

详见: 文本扫描, 加载, dlmread, fscanf, strread.

 
: C = textscan (fid, format)
: C = textscan (fid, format, repeat)
: C = textscan (fid, format, param, value, …)
: C = textscan (fid, format, repeat, param, value, …)
: C = textscan (str, …)
: [C, position, errmsg] = textscan (…)

从文本文件或字符串中读取数据。

字符串str或与关联的文件fid读取并根据format。该函数是的扩展strreadtextread。差异包括:从文件或字符串中读取的能力、附加参数和附加格式值。

输入被解释为单词、分隔符(如空白)和文字的序列。构成分隔符和空白的字符从参数决定。格式从散布在文字之间的格式值组成。在该格式中,空白是连续文字之间的分隔符,但在其他情况下会被忽略。

输出C是一个元胞数组,其中列的数量从格式值的数量决定。

输入的第一个字与格式的第一个值匹配,并放置在输出的第一列中;第二个与第二个值匹配并放在第二列中,依此类推。如果单词多于值,则重复该过程,直到所有单词都已处理完毕或达到重复已满足(见下文)。

字符串format描述中的单词str应该进行解析。如中所示fscanf,任何非这些值格式的(非空白)文本都被视为文本。如果两个格式值之间有一个文字,那么相同的文字必须出现在匹配单词之间的输入流中。

以下值有效:

f
%f64
n

该单词被解析为数字并转换为双精度。

%f32

单词被解析为数字并转换为single(float)。

d
%d8
%d16
%d32
%d64

该单词被解析为数字,并转换为int8、int16、int32或int64。如果未指定大小,则使用int32。

u
%u8
%u16
%u32
%u64

单词被解析为数字,并转换为uint8、uint16、uint32或uint64。如果没有指定大小,则使用uint32。

s

该单词被解析为以空格前最后一个字符、行尾或参数中指定的分隔符结尾的字符串。

q

该单词被解析为“带引号的字符串”。如果字符串的第一个字符是双引号(“),则该字符串包括所有内容,直到匹配的双引号为止,包括空格、分隔符和行尾字符。如果输入中出现一对连续的双引号,则输出中会用一个双引号替换。例如,输入“He said”“Hello”“将返回值”He said'Hello“。

c

读取输入的下一个字符。这包括分隔符、空白和行尾字符。

%[…]
%[^…]

在第一种形式中,单词从最长的一行组成,该行仅从括号之间的字符组成。字符范围可以通过连字符指定;例如,%[0-9a-zA-Z]匹配所有字母数字字符(如果基础字符集是ASCII)。自从MATLAB从整体上处理连字符,此扩展仅适用于字母数字字符。要在集合中包含“-”,它应该出现在括号中的第一个或最后一个;要包含“]”,它应该是第一个字符。如果第一个字符是“^”,则单词从个字符组成上市的

N

对于%s、%c%d、%f、%n、%u,可选宽度可以指定为%Ns等。其中n是大于1的整数。对于%c,这将导致丢失N个字符,而不是单个字符。对于其他值,它是基于读取的字符数的上限;正常的分隔符可能会导致读取更少的字符。对于复数,这一限制分别适用于实数和虚数分量。对于%f和%n,允许使用像%n.Mf这样的格式值,其中M是要考虑的小数点后字符数的上限;跳过后面的数字。例如,值%8.2f将12.345e6读取为1.234e7。

%*…

将跳过从转换值的剩余部分指定的单词。

字面量

此外,该格式可能包含文字字符串;这些将在阅读过程中跳过。如果输入字符串与此文字不匹配,则处理终止。

对应于第一个值的解析词在第一个输出参数中返回,对于其余的值也是如此。

默认情况下,如果只有一个输入参数,formatf这意味着数字从输入读取到单列向量中。如果format显式为空()则textscan将返回与输入的第一个数据行上的字段数相匹配的多个列中的数据。只有当输入仅为数字时,这两种方法中的任何一种都适用。

例如,字符串

str=“\兔八哥5.5\鸭子达菲-7.5e-5\企鹅Tux 6

可以使用读取

a=文本扫描(str,“%s%s%f”);

可选的数字参数重复可用于限制读取的项目数量:

-1

读取所有字符串或文件,直到结束(默认值)。

N

读取,直到出现两个条件中的第一个:1)格式已处理N次,或2)输入的N行已处理。零(0)是的可接受值重复。目前,%q、%c和%[…]$转换中的行尾字符不影响行数。这与不兼容MATLAB并且可能在未来发生变化。

的行为文本扫描可以通过属性/值对进行更改。可以识别以下属性:

BufSize

这指定了用于内部缓冲区的字节数。当读取大文件时,将其设置为一个大值,特别是当输入包含长字符串时,可以获得适度的速度提高。默认值为4096,或取决于n如果指定了。

CollectOutput

值为1或true指示文本扫描在输出元胞数组中连接同一类的连续列。值为0或false(默认值)时,输出将保留在不同的列中。

注释样式

指定输入中被视为注释并将被跳过的部分。value是注释样式,可以是(1)字符串或1x1数组字符串,跳过它右边的所有内容;(2) 从两个字符串组成的元胞数组,用于跳过第一个字符串和第二个字符串之间的所有内容。注释仅在接受空白的地方进行解析,而不充当分隔符。

分隔符

如果value是字符串,中的任何字符value将用于将输入拆分为单词。如果value是字符串的元胞数组,数组中的任何字符串都将用于将输入拆分为单词。(默认值=任何空白。)

EmptyValue

对于非空格分隔的数据中的空数值,要返回的值。默认值为NaN。当数据类型不支持NaN(例如int32)时,默认值为零。

EndOfLine

value可以是空字符,也可以是指定行尾字符的一个字符,或者是对\r\n(CRLF)。在后一种情况下r, n\r\n被计算为(单个)换行符。如果没有给出值,\r\n使用。

标题行

第一个value的行数fid被跳过。请注意,这不是指第一个非注释行,而是指任何类型的第一行。

多个DelimsAsOne

如果value为非零,则将一系列连续的分隔符(中间没有空格)视为单个分隔符。连续的删除序列不需要垂直对齐。如果没有此参数,行末尾之前的一个分隔符不会导致该行被视为以空值结尾,但行开头的一个单独分隔符会导致该行以空值开头。

TreatAsEmpty

处理中出现的单个字符串(用分隔符或空格包围)value作为缺失值。

ReturnOnError

如果设置为数字1或true,则在遇到错误时立即正常返回,例如尝试使用读取字符串f。如果设置为0或false,则返回一个错误且没有数据。

空白

中的任何字符value将被解释为空白并进行修剪;空白的默认值为\b\r\n\t(注意空格)。除非空白设置为(空)AND至少一个s提供了格式转换值,空格总是空白的一部分。

当中的字数strfid与格式转换值数量的精确倍数不匹配,文本扫描sbehavior取决于字符串或文件的最后一个字符是否为终点线参数

最后一个字符=行尾

数据列填充有空字段,NaN或0(对于整数字段),因此所有列的长度相等

最后一个字符不是行尾

数据列未填充;文本扫描返回长度不等的列

第二个输出位置提供处理停止的位置,以字符为单位,从文件或字符串的开头算起。

详见: dlmread, fscanf, 加载, strread, textread.

这个导入数据函数能够处理各种各样的数据。

 
: A = importdata (fname)
: A = importdata (fname, delimiter)
: A = importdata (fname, delimiter, header_rows)
: [A, delimiter] = importdata (…)
: [A, delimiter, header_rows] = importdata (…)

从文件导入数据filename.

输入参数:

  • filename包含数据的文件的名称。
  • 分隔符分隔数据列的字符。使用\t用于参数卡。(仅适用于ASCII文件)
  • header_rows数据开始之前的标题行数。(仅对ASCII文件有效)

支持不同的文件类型:

  • ASCII表

    使用指定的标题行数和指定的分隔符导入ASCII表。

  • 图像文件
  • MATLAB文件
  • 电子表格文件(取决于外部软件)
  • WAV文件

详见: 文本扫描, dlmread, csvread, 加载.

导入后,数据可能需要在进一步分析之前进行转换。这个重新缩放函数可以将数据集移位并规范化为指定的范围。

 
: B = rescale (A)
: B = rescale (A, l, u)
: B = rescale (…, "inputmin", inmin)
: B = rescale (…, "inputmax", inmax)

将矩阵元素缩放到指定的值范围。

使用单个矩阵参数调用时A,重新缩放元素以占用间隔[0,1]。

可选输入[l, u]将缩放A到具有下界的区间l和上限u.

可选输入输入最小值替换所有小于指定值的元素inmin具有inmin。同样,optionalinputinputmax替换所有大于指定值的元素inmax具有inmax.如果未指定,则从数据本身获取的最小值和最大值(inmin=最小值(A(:))inmax=最大值(A(:))).

编程说明:应用的公式为

B= l+ ((A- inmin) ./ (inmax- inmin)).* (u- l)

输出矩阵的类B如果输入为单一Aissingle,但对于双精度、整数或逻辑类型的输入,它属于双精度类。

详见: 界限, 最小, 最大值.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号