Azzera filtri
Azzera filtri

Convert char to table

47 visualizzazioni (ultimi 30 giorni)
Asi
Asi il 2 Nov 2023
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 Commento
Stephen23
Stephen23 il 2 Nov 2023
"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.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 2 Nov 2023
Modificato: Walter Roberson il 2 Nov 2023
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

Più risposte (2)

Stephen23
Stephen23 il 2 Nov 2023
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 il 2 Nov 2023
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

Categorie

Scopri di più su Data Type Conversion in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by