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]
值仍然以列優先順序讀取。