Octave 编程教程/文本和文件输出
disp
函数以与简单地输入变量名称相同的方式显示变量的值(标量、向量、矩阵、字符串等)。例如,
octave:1> x = [1, 2, 3] x = 1 2 3 octave:2> disp(x) 1 2 3
然而,变量名不会显示。您还可以显示计算结果,而不会显示通常在其之前的ans =
。
octave:3> log(10) ans = 2.3026 octave:4> disp(log(10)) 2.3026
disp
的输出取决于format
命令。
octave:5> format long octave:6> disp(log(10)) 2.30258509299405
可以使用fdisp
将显示的值打印到屏幕、保存到字符串或保存到文件。
octave:7> s = disp(log(10)) s = 2.30258509299405
请注意,s
是一个包含上面显示字符的字符串。
fdisp
函数可用于将值保存到文件。在执行此操作之前,我们必须打开一个文件。这可以通过使用fopen
命令来完成。
fopen(filename, mode)
打开一个文件并返回其标识符。filename
参数是一个字符串,可以是当前目录中任何新文件或现有文件的名称。mode
参数是一个字符串,指定文件是打开用于- 读取 (
r
)、 - 写入 (
w
),还是 - 追加 (
a
)。
当文件以写入方式打开时,其内容将被擦除并替换为新数据。要保留文件中现有的数据并追加到其末尾,请使用追加模式。
octave:10> file_id = fopen('mydata.txt', 'w');
这里,file_id
只是一个变量名,我们使用它来告诉 Octave 要写入哪个文件。
fdisp(file_id, value)
将value
写入由file_id
标识的文件。
写入文件的输出将与disp
命令的输出完全相同。
在将所有数据写入文件后,关闭文件非常重要。 关闭文件告诉 Octave 完成任何可能仍在等待的输出,并释放文件,以便其他用户或程序可以打开它。
fclose(file_id)
关闭由file_id
标识的文件。
printf
函数比disp
强大得多,因此使用起来也更复杂一些。使用printf
,您可以精确定义值的输出应是什么样子。这包括指定
- 要显示的有效位数;
- 数字的格式(整数、实数、科学记数法等);
- 在值之前或之后显示的其他输出。
由于使用printf
格式化输出有许多不同的方法,因此我们在这里只使用示例讨论基础知识。有关更完整的信息,请键入
doc printf
在 Octave 中,并使用空格键翻阅帮助。
printf
函数在其屏幕上显示其输出。使用sprintf
将结果返回到字符串中,使用fprintf
将其写入文件。请注意,fprintf
需要一个额外的参数来指定文件标识符。
printf(format, value, ...)
sprintf(format, value, ...)
fprintf(fid, format, value, ...)
请注意,这些函数可以同时输出多个值,有关详细信息,请参见下一节。
让我们看一个例子。
octave:18> x = 10.1; octave:19> y = 5.5; octave:20> z = 'test'; octave:21> printf('An integer: %i. A real: %f. This is a %s.\n', x, y, z); An integer: 10. A real: 5.500000. This is a test.
重要的是第 21 行中printf
函数的第一个参数。它指定了printf
的输出应是什么样子。本质上,百分号 (%
) 表示应将一个值放置在其在格式字符串中的位置。在格式字符串中
'An integer: %i. A real: %f. This is a %s.\n'
%i
将被替换为一个整数,%f
将被替换为一个实数 (f
表示浮点数),%s
将被替换为一个字符串。整数、实数和字符串的值作为参数传递给printf
,位于格式字符串之后。请注意,上面的示例中x
等于 10.1,但显示的值为 10,因为我们指定了printf
应该显示一个整数。最后,字符串末尾的\n
告诉 Octave 移动到新的一行。
下一个示例演示了以下类型
- 整数 (
%i
), - 实数 (
%f
), - 科学记数法 (
%e
), - 百分号 (
%%
)。
有关更多类型,请参阅 Octave 文档。
octave:22> x = 10.34; octave:23> printf("x is a real number: %f (%e in scientific notation).\n", x, x); x is a real number: 10.340000 (1.034000e+01 in scientific notation). octave:24> printf("Write percentages as %i%%.\n", x); Write percentages as 10%.
请注意
%e
格式将值输出为 的形式,其中 且 b 为整数;- 变量
x
在第 23 行传递给printf
两次,因为我们希望将其输出两次(以不同的格式); - 第 24 行的双百分号 (
%%
) 输出一个单百分号。
我们可以通过指定以下内容来进一步自定义值的输出
- 输出的宽度,以及
- 输出的精度。
宽度允许您右对齐数字,并在百分号和格式说明符之间指定。例如,
octave:36> x = 10; octave:37> y = pi; octave:38> z = 'test'; octave:39> printf("%9i\n%9f\n%9s\n", x, y, z); 10 3.141593 test
请注意,在printf
中,每个格式说明符都包含一个整数 (9)。这告诉printf
使用 9 列输出整数、实数和字符串。
精度参数的效果取决于输出类型。它最明显的用法是指定在实数的小数点后显示的位数。精度在宽度之后指定,并由一个点 (.
) 前缀。
octave:40> printf("%9.3f\n", pi); 3.142
这将使用 9 列和小数点后 3 位显示 π。请注意,数字是四舍五入的。有关精度参数的其他用途(例如,用于整数和字符串),请参阅 Octave 帮助。
当传递给printf
函数的值为矩阵或向量时,将打印其中的所有值。如果格式字符串中只有一个格式说明符,则它将用于矩阵中的每个值。
octave:51> A = [1, 2, 3; 4, 5, 6; 7, 8, 9]; octave:52> printf("%i\n", A) 1 4 7 2 5 8 3 6 9
请注意,值是从矩阵中以列优先顺序读取的,即首先显示第一列的所有值,然后是第二列,依此类推。
如果格式字符串中有多个格式说明符,printf
将循环遍历它们。
octave:57> printf("[%i, %.1f, %.2e]\n", A) [1, 4.0, 7.00e+00] [2, 5.0, 8.00e+00] [3, 6.0, 9.00e+00]
值仍然以列优先顺序读取。