Matlab非結構化文字讀取+正則化+cell變數命名
阿新 • • 發佈:2018-12-17
Matlab非結構化文字讀取+正則化+eval變數命名
1 任務目標
任務目標是將下面這個檔案中的資料讀取進入Matlab工作空間,以cell或者struct的形式儲存:
"Summary": { "Slices": 1, "InitialPositionList": null, "Interval_ms": 10000, "UUID": "db9b2d37-d5f0-42ef-9bdf-95bcb9a3ab6d", "UserName": "213", "Depth": 2, "PixelType": "GRAY16", "Time": "2018-10-23 22:22:04 +0800", "Date": "2018-10-23", "z-step_um": 0, "MetadataVersion": 10, "PositionIndex": 0, "SlicesFirst": false, "ChContrastMin": [0], "Width": 1024, "PixelAspect": 1, "MicroManagerVersion": "1.4.22", "ROI": [ 0, 0, 1024, 1024 ], "ChNames": ["Default"], "IJType": 1, "GridRow": 0, "Comment": "", "Height": 1024, "GridColumn": 0, "Prefix": "Untitled_1", "PixelSize_um": 0, "Frames": 4, "BitDepth": 16, "KeepShutterOpenChannels": false, "Source": "Micro-Manager", "Channels": 1, "ComputerName": "213-PC", "CustomIntervals_ms": [], "KeepShutterOpenSlices": false, "ChColors": [-1], "TimeFirst": false, "ChContrastMax": [65536], "Positions": 1, "Directory": "C:\\Users\\213\\Desktop\\yyt1023" }
2 解決方案
- 把Summary括號裡的東西取出來
- 用regexp函式結合正則表示式找到
’'["][_A-Za-z0-9-]*["][:][\s]'
類似“Slices”,“InitialPositionList”的位置序號 - 取兩個位置間的字串,根據冒號將左右兩部分分開
- 存放進入cell或struct
3 小技巧
3.1 正則表示式
正則表示式被用來檢索、替換那些符合某個模式(規則)的文字。 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。 看百度百科可以知道了解它最基本的用法,正則表示式百度百科
剛開始學習會感到很複雜,這也可以利用網路上的一些線上生成正則表示式的工具,比如: 正則表示式線上生成——txt2re
一些小貼士
- *:星號表示重複,因此可以表示多個字元相連的情況
- []:括號就只能表示一個字元,但括號裡可以放^,標點符號等等,很靈活
- \s:這個符號代表一個空格
3.2 分清matlab中的cell和struct資料結構
cell和struct中每個元素的資料型別都可以不同,但cell裡面的資料沒有名字,而struct裡面的資料有名字
3.3 eval()函式
這個函式可以讓你實現一些很有趣的事情,比如你想讓程式執行中出現的一個字串變成一個變數的變數名:
a = input('Please input your name: '); b = 'good'; commands = strrep(a,'=b'); eval(commands)
假如輸入XiYa,執行結果會是:
Xiya = 'good'
這個函式的作用是讓一個字串作為一條執行的語句,之後執行。