csv形式のファイルからデータをインポートして、処理した上でcsvファイルと同じファイル名のxlsxファイルの作成を考えております。
file = "C:\asdf.csv";
[filepath,name,ext] = fileparts(file)
としてcsvのファイル名をstring形式で取り込み
処理したデータTを
writetable(T,name.xlsx)
とすればできるのではないか考えたのですができませんでした。
良い方法があれば教えていただけないでしょうか?

4 commentaires

Atsushi Ueno
Atsushi Ueno le 3 Juil 2022
xlsxファイルの作成にwritetable関数を使用するのであれば、csv形式のファイルからデータをインポートするのにもreadtable関数を使用すれば良いのではないでしょうか?
Atsushi Ueno
Atsushi Ueno le 3 Juil 2022
writetable(T,name.xlsx)
ではなく
writetable(T,'name.xlsx')
とする必要がありますが、そこは問題ないでしょうか?
Koji
Koji le 3 Juil 2022
ありがとうございます。
writetable(T,'name.xlsx')
これも試しましたが、name.xlxsができてしまい、
求めているasdf,xlsxはできませんでした。
最終的なファイルはcsv形式でもいいのですが、データ処理後のファイル名に元々のファイル名asdfを反映できればと考えております。
Atsushi Ueno
Atsushi Ueno le 3 Juil 2022
そういう事でしたか。それならこれでファイル名の拡張子だけ変更して保存する事が出来ます
file = "C:\asdf.csv";
[filepath,name,ext] = fileparts(file)
writetable(T,[filepath,name,'.xlsx']);

Connectez-vous pour commenter.

 Réponse acceptée

Hernia Baby
Hernia Baby le 4 Juil 2022

1 vote

エラー: writetable (line 152)
FILENAME は空でない文字ベクトルまたは string スカラーでなければなりません。
---------------------------------------------------
これはcatが配列の結合だからです。
string配列でなく、スカラーにするにはappendを使用してください。
file = "C:\asdf.csv";
[filepath,name,ext] = fileparts(file)
filepath = ""
name = "C:\asdf"
ext = ".csv"
以下がcatでの連結です
[filepath,name,'.xlsx']
ans = 1×3 string array
"" "C:\asdf" ".xlsx"
以下がappendでの連結です
filepath + name + '.xlsx'
ans = "C:\asdf.xlsx"
※関係ないですがMATLAB Answers上ではfilepartsがCドライブがないためか、filepathが空になるんですね。

2 commentaires

Atsushi Ueno
Atsushi Ueno le 4 Juil 2022
system('cat /proc/version');
Linux version 5.4.185-0504185-generic (kernel@gloin) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)) #202203160950 SMP Wed Mar 16 14:00:16 UTC 2022
厳密に言うとCドライブが無い事が原因ではなく、Linuxプラットフォームではfileparts関数がファイルパスの区切り文字としてスラッシュ(/)しか受け付けない事が原因ですね。Windowsプラットフォームではスラッシュ(/)もバックスラッシュ(\)も使えるので、fileparts関数は両方とも使えると勘違いしていました。
% On Microsoft Windows systems, you can use either forward (/) or back (\) slashes
% as path delimiters, even within the same path. On Unix and Macintosh systems, use
% only / as a delimiter.
Hernia Baby
Hernia Baby le 4 Juil 2022
なるほどLinux環境が原因だったんですね…!勉強になるなあ…

Connectez-vous pour commenter.

Plus de réponses (2)

Koji
Koji le 3 Juil 2022

0 votes

ありがとうございます。
file = "C:\asdf.csv";
[filepath,name,ext] = fileparts(file)
writetable(T,[filepath,name,'.xlsx']);
上記で試したところ
file、filepath、nameはstring形式でワークスペースには現れていますが
エラー: writetable (line 152)
FILENAME は空でない文字ベクトルまたは string スカラーでなければなりません。
となってしまいました。
Koji
Koji le 4 Juil 2022

0 votes

お二方ご助言ありがとうございました。
str1=append(name,'.xlsx');
writetable(T,str1);
お陰様で上記で、求めたいた元々のファイル名を使ったxlsxファイルを作成することができました。

1 commentaire

Atsushi Ueno
Atsushi Ueno le 4 Juil 2022
おっとこれはすいません。間違えてstring型に文字ベクトルをくっつけてしまいました。

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB Coder dans Centre d'aide et File Exchange

Produits

Version

R2019b

Community Treasure Hunt

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

Start Hunting!