string形式のファイル名の作成

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

4 件のコメント

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

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

 採用された回答

Hernia Baby
Hernia Baby 2022 年 7 月 4 日

1 投票

エラー: 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 件のコメント

Atsushi Ueno
Atsushi Ueno 2022 年 7 月 4 日
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 2022 年 7 月 4 日
なるほどLinux環境が原因だったんですね…!勉強になるなあ…

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

その他の回答 (2 件)

Koji
Koji 2022 年 7 月 3 日

0 投票

ありがとうございます。
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 2022 年 7 月 4 日

0 投票

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

1 件のコメント

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

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

カテゴリ

ヘルプ センター および File ExchangeText Data Preparation についてさらに検索

製品

リリース

R2019b

質問済み:

2022 年 7 月 3 日

コメント済み:

2022 年 7 月 4 日

Community Treasure Hunt

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

Start Hunting!