2013-03-13 62 views
0

如果我有三個字符串,例如'Y20194''219Y42''12345'我如何將它們分解爲一個向量,如[Y 2 0 1 9 4],[1 2 3 4 5][2 1 9 Y 4 2]?我正在使用str2num,但我認爲在我轉換爲數值之前我缺少一個步驟(先將字符串中的各個數字分開)。此外,字符不正確閱讀並使用str2num給我[]。分解一個字符串,然後轉換爲矢量?

我有一個文件,其中包含上面的一行字符串。我用fgetl來讀取我的文件的每一行字符串,但有點卡住了。

+1

將字符串轉換爲標量值數組(has已被回答):http://stackoverflow.com/questions/12255056/matlab-converting-the-string-321-to-3-2-1?lq=1你想如何處理非數字值,即在結果數組中,上面的'Y'是什麼? – gevang 2013-03-13 19:18:37

+0

我有一個字符串文件,我想將它們讀入矩陣並將Ys更改爲0。我使用'fgetl'來讀取我的文件,然後我被困在如何將這些字符串讀入矢量中,因爲我一直在想,一旦我能夠將這些字符串轉換爲矢量,我就可以使用'find'來更改Ys像我喜歡的0。 – Abi 2013-03-13 21:54:08

+0

如上所述,鏈接的答案你可以用's ='Y20194'; v = arrayfun(@ str2double,s); v(isnan(v))= 0;',將非數值轉換爲'0'(或任何值)。 – gevang 2013-03-13 23:25:39

回答

1

該字符將被保留。並且數字將被轉換爲雙重類型。

如果輸入不是來自讀取文件,則代碼如下。該RESULT1是包含要在陣列單元:

enter image description here

如果輸入的是一個文件,讓我們這個文件爲例:demo1.txt,其內容如下: enter image description here

的代碼將每行轉換爲您想要的內容,如下所示。該代碼將每行轉換爲您想要的,然後顯示它。

enter image description here

如果你想用零來代替「Y」或其它字母,那麼代碼將如下

enter image description here

+1

啊,是的,第二個是我正在尋找的。謝謝!如果在將它讀入單元格數組之後,我想將'Y'轉換爲數字。例如,在閱讀完字符串文件後,我想將所有Y都更改爲0?我只需要使用'find'命令來替換0的Ys?我知道這將適用於一個正常的數字向量,但它也適用於單元格陣列? – Abi 2013-03-13 21:48:12

+1

嗨,我已經更新了答案。看最後一個數字。如果你想'數組'而不是'單元格',你可以將第11行改爲'result1 = []'。要使用'find'在單元格中找到一個元素,可以參考這篇文章:http://stackoverflow.com/questions/8061344/how-to-search-for-a-string-in-cell-array-in -matlab – tqjustc 2013-03-14 00:15:32

0

也許STRSPLIT將有所幫助。

ts = strsplit('Y20194'); 
%  ts <- {'Y', '2', '0', '1', '9', '4'} 

現在,您可以嘗試使用str2num將矢量中的每個元素單獨轉換爲數字。

N = size(ts, 1); 
str = cell(1, N); 
for i=1:N; 
    str{i} = str2num(ts{i, 1}); 
end 

但由於一些字符串中的字符不是數字(例如,「Y」),我不希望這很好地工作。

(它已經有一段時間,我的一些指標可以交換。)

+0

我相信STRSPLIT只出現在最新版本2013a中。你需要額外的參數來將字符串分割成單個字符。有關示例,請參見[documentation](http://www.mathworks.com/help/matlab/ref/strsplit.html)。 – yuk 2013-03-27 15:58:23

2

你不能有一個數字矢量字符和數字。

你可以做到以下幾點:

s = 'Y20194'; 
c = cellstr(s')'; 
v = str2double(c); 

電池陣列c將有來自s在單個細胞中分離的所有字符。請注意,您必須先轉置字符串s

在載體v中,第一個值是NaN,因爲它是一個字符。

+0

+1爲好的答案,但我想你可能想把最後一段作爲對其他答案的評論。 – Jonas 2013-03-13 20:09:03

+0

將最後一段移至評論。打掃乾淨。 – yuk 2013-03-27 15:59:07

0

如果你想在Y變成0一個非常簡單的解決方案可用:

str = 'Y20194'; 
str(str==Y)='0'; 
str - '0' 
相關問題