Hi,
I have a series of coordinates as char type (disp output):
[446 154;445 155;444 156;443 156;442 156]
How can I convert them to table so can be save like this using writetable:
446 154
445 155
444 156
443 156
442 156
Thanks

1 件のコメント

Stephen23
Stephen23 2023 年 11 月 2 日
"I have a series of coordinates as char type (disp output)"
Best solution: avoid the indirection of printing numeric data to text and then converting from text back into numeric.

サインインしてコメントする。

 採用された回答

Walter Roberson
Walter Roberson 2023 年 11 月 2 日
編集済み: Walter Roberson 2023 年 11 月 2 日

0 投票

str2num preferably with restricted
coordinates = '[446 154;445 155;444 156;443 156;442 156]';
C = str2num(coordinates, 'Evaluation', 'restricted')
C = 5×2
446 154 445 155 444 156 443 156 442 156
T = array2table(C, 'VariableNames', {'X', 'Y'})
T = 5×2 table
X Y ___ ___ 446 154 445 155 444 156 443 156 442 156

その他の回答 (2 件)

Stephen23
Stephen23 2023 年 11 月 2 日

1 投票

If you already have a character vector and the goal is to print it to file, then avoid the indirection of converting to numeric just so that you can use WRITEMATRIX:
txt = '[446 154;445 155;444 156;443 156;442 156]';
spl = split(replace(txt,["]","["],""),";");
writelines(spl,'test.txt')
Check the file content:
type test.txt
446 154 445 155 444 156 443 156 442 156
Voss
Voss 2023 年 11 月 2 日

0 投票

If you have a char vector like this,
coordinates = '[446 154;445 155;444 156;443 156;442 156]';
disp(coordinates)
[446 154;445 155;444 156;443 156;442 156]
then one way to get the numbers out is
C = split(coordinates,';');
C = regexp(C,'[\d+-Ee.]+','match');
C = vertcat(C{:})
C = 5×2 cell array
{'446'} {'154'} {'445'} {'155'} {'444'} {'156'} {'443'} {'156'} {'442'} {'156'}
Then you can do whatever conversion you need. For instance, converting to a matrix makes sense to me:
M = str2double(C)
M = 5×2
446 154 445 155 444 156 443 156 442 156
in which case you would use writematrix to write it to a file:
filename = 'matrix.csv';
writematrix(M,filename)
% show the file's contents:
type(filename)
446,154 445,155 444,156 443,156 442,156
Of course, you can also convert to a table and use writetable, if you prefer:
T = array2table(M) % a table of numbers
T = 5×2 table
M1 M2 ___ ___ 446 154 445 155 444 156 443 156 442 156
filename = 'table_of_numbers.csv';
writetable(T,filename)
% show the file's contents:
type(filename)
M1,M2 446,154 445,155 444,156 443,156 442,156
T = cell2table(C) % a table of char vectors
T = 5×2 table
C1 C2 _______ _______ {'446'} {'154'} {'445'} {'155'} {'444'} {'156'} {'443'} {'156'} {'442'} {'156'}
filename = 'table_of_chars.csv';
writetable(T,filename)
% show the file's contents:
type(filename)
C1,C2 446,154 445,155 444,156 443,156 442,156

カテゴリ

ヘルプ センター および File ExchangeData Type Conversion についてさらに検索

製品

質問済み:

Asi
2023 年 11 月 2 日

編集済み:

2023 年 11 月 2 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by