RM-2 使用matlab進行txt檔案讀寫

XQYsama發表於2020-10-07

!本文僅供自己參考,東拼西湊系列
!總擔心草稿會丟失,因此先發出來了。還有一大半還沒寫,枯了

二、使用matlab對txt進行讀寫

使用Matlab讀取txt檔案時,常用函式有:

  • 高階函式:load; importdata; dlmread; textread; strread.
  • 低階函式:fopen; fclose; fgets; fgetl; fscanf; textscan.

其中,低階函式呼叫語法比較複雜,但是能按照各種格式讀取檔案,具有一定的靈活性。高階函式的呼叫語法簡單,但是隻適用於某些特殊格式的檔案型別,缺乏靈活性。

(一)利用資料匯入導向匯入txt

方法1. 主頁>>匯入資料>>檔案選擇
方法2. 在命令視窗輸入:

>> uiimport
#最終變數名與檔名相同
#缺點是:只能匯入排列較為整齊的資料,無法匯入字串
#當各列資料數量不同時,使用NaN自動補全

(二)high level(2例題待補

指定資料檔案時,應制定檔案完整路徑;否則,應將檔案至於matlab搜尋路徑下。
1. A = importdata(‘filename’)
[A D H] = importdata(‘filename’)
[……] = importdata(’-pastespecial’)
這種呼叫自動識別資料間分隔符,將讀取的資料賦給變數A。
其中A是結構體陣列,A.data是數值型資料,A.textdata是文字資料
D是“返回的分隔符”,H是“返回的標頭檔案行數”

此時讀取的中文title均為亂碼
故在呼叫importdata函式前,打上

feature('DefaultCharacterSet', 'UTF8');  

即可使matlab支援utf-8編碼。

讓我們來舉個txt例子:

比如txt檔案如下:

俺是一個測試文件,這是沒啥用的一行。
我是誰 我在幹啥 我在做什麼 啊啊啊啊!!
0.000123 0.000325 0.000378 0.000598
0.000986 0.000256 0.000245 0.000698 23333333

敲上去的字兒:

clc;clear;
feature('DefaultCharacterSet', 'UTF8'); 
M = importdata('textme.txt')  
#這個檔名應該是testme的,hh……(尷尬而不失禮貌的微笑)

出來的結果:

M = 

  包含以下欄位的 struct:
          data: [3×4 double]
      textdata: {2×4 cell}
    colheaders: {'我是誰'  '我在幹啥'  '我在做什麼'  '啊啊啊啊!!'}
#其中,data有3行的原因是23333333被擠到下面了。
#可能是因為第一行資料有幾個,這個data矩陣就有幾列 吧=A=

另外:當資料檔案較大時,不要搞str2num這種資料轉換,瘋狂呼叫函式hhh

2. load -ascii filename ——(1)
A = load(‘filename’,’-ascii’) ——(2)
B = dlmread(‘filename’,‘delimiter’,R,C) ——(3)
[c1,c2,c3…] = textread(‘filename’,‘format’,N,‘param’,‘value’,…) ——(4)

(1)是load的命令列方式,自動產生變數(變數名是檔名)

(2)是呼叫load函式,可自定義變數名

(3)delimiter是‘指定分隔符’,R是‘所讀資料的起始行’,C是‘所讀資料的起始列’,其中R與C的起始數字都是0,其數字起始方式如C++,從0開始=從1開始。也可以:B = dlmread(‘filename’,‘delimiter’,range),其中range=[R1,C1,R2,C2],表示所讀資料的左上角和右下角。
且dlmread只能讀取單種分隔符的資料檔案,否則會報錯(‘ ’,‘colon’,‘semicolon’)

(4)format是資料寫入格式,比如%d,%5.2f,%s,%c。(藉助 %*? 跳過列。此時等號前的被賦值引數可不寫)
N是 重複使用N次由format指定的格式讀取資料
param是一種引數名,比如‘headlines’,‘delimiter’,‘whitespace’(把字元作為空格)
value是param的取值。

!其中,load和dlmread只能讀數

(例子我以後再寫……鴿鴿)

三、Low level(還沒寫

測試檔案:

4.傾覆力矩 單位為kN.m 以下地震總傾覆力矩由給定水平力作用下的牆柱剪力求得,只用於比較牆柱傾覆力矩

0.00度地震方向… 層號 塔號 總傾覆力矩 柱傾覆力矩 比例(%) 一般牆傾覆力矩 比例(%) 短牆傾覆力矩 比例(%)
1 1 213085.13 8265.84 3.9 169422.59 79.5 35396.64 16.6
2 1 199156.00 7997.07 4.0 156910.95 78.8 34247.94 17.2
3 1 188795.81 7651.01 4.1 148052.38 78.4 33092.39 17.5
4 1 178577.22 7260.48 4.1 139516.56 78.1 31800.14 17.8
5 1 168552.22 6849.23 4.1 131284.92 77.9 30418.04 18.0
6 1 158758.06 6449.38 4.1 123219.60 77.6 29089.04 18.3
7 1 149215.14 6076.45 4.1 115434.23 77.4 27704.44 18.6
8 1 139938.30 5708.01 4.1 107911.72 77.1 26318.55 18.8
9 1 130933.94 5345.22 4.1 100670.55 76.9 24918.15 19.0
10 1 122201.20 4991.57 4.1 93690.69 76.7 23518.93 19.2
11 1 113733.77 4647.76 4.1 86959.30 76.5 22126.69 19.5
12 1 105522.21 4314.06 4.1 80462.05 76.3 20746.09 19.7
13 1 97556.52 3990.35 4.1 74185.70 76.0 19380.45 19.9
14 1 89828.02 3676.43 4.1 68119.19 75.8 18032.38 20.1
15 1 82329.98 3372.05 4.1 62253.84 75.6 16704.08 20.3
16 1 75057.46 3076.99 4.1 56583.02 75.4 15397.44 20.5
17 1 68006.91 2791.08 4.1 51101.64 75.1 14114.18 20.8
18 1 61176.10 2514.18 4.1 45806.11 74.9 12855.80 21.0
19 1 54564.37 2246.32 4.1 40693.71 74.6 11624.33 21.3
20 1 48173.18 1986.83 4.1 35769.25 74.3 10417.10 21.6
21 1 42007.12 1738.58 4.1 31016.84 73.8 9251.69 22.0
22 1 36075.42 1499.54 4.2 26460.25 73.3 8115.63 22.5
23 1 30393.84 1271.37 4.2 22106.57 72.7 7015.89 23.1
24 1 24987.17 1055.21 4.2 17975.98 71.9 5955.98 23.8
25 1 19891.97 852.67 4.3 14098.44 70.9 4940.86 24.8
26 1 15159.33 665.75 4.4 10517.04 69.4 3976.55 26.2
27 1 10858.05 496.83 4.6 7291.21 67.2 3070.00 28.3
28 1 7078.46 348.44 4.9 4499.94 63.6 2230.08 31.5
29 1 3936.25 223.50 5.7 2252.10 57.2 1460.65 37.1
30 1 1573.12 120.62 7.7 654.07 41.6 798.43 50.8
31 1 200.11 47.35 23.7 152.76 76.3 0.00 0.0

fprintf;fscanf; fclose

fopen;fclose;
fscanf(fid,format,size);
fprintf;feof(到達檔案末尾,while ~feof)

四、把資料寫入TXT(還沒寫

命令語法 save mydata.mat variable –ascii
函式語法 save(‘mydata.mat’,’variable’,’-ascii’);

[c1 c2 c3 c4] = textread(‘sample_file2.txt’,’%s %s %s %s’,‘headerlines’,2)
(讀取四列,跳過txt中前兩行)

dlmwrite(‘ASDFGH’, ’ ’);


本文主要參考內容:

  • https://www.ilovematlab.cn/thread-872-1-1.html
    使用文字檔案(.txt)進行資料存取的技巧總結
  • 《MATLAB從零到進階》P195~P220

相關文章