1. 程式人生 > >Matlab非結構化文字讀取+正則化+cell變數命名

Matlab非結構化文字讀取+正則化+cell變數命名

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 解決方案

  1. 把Summary括號裡的東西取出來
  2. 用regexp函式結合正則表示式找到’'["][_A-Za-z0-9-]*["][:][\s]'類似“Slices”,“InitialPositionList”的位置序號
  3. 取兩個位置間的字串,根據冒號將左右兩部分分開
  4. 存放進入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'

這個函式的作用是讓一個字串作為一條執行的語句,之後執行。