🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2962閲覧

JSONファイル・テキストファイルのコピー

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/06 07:18

編集2019/12/06 08:17

やりたいこと

タイトルの通りなのですが、何かしらのプログラムを使ってJSONファイルのコピーを行いたいと考えています。
また、その際に1日ごとのファイル名にしたいため、for文のように処理できればと考えています。
ex)
1-1.json
1-2.json

12-31.json

わからないこと

私自身が今使えるのはJavaScriptとC言語なのですが、JSONファイルを中身はそのままでコピーすることは可能でしょうか?

やってみたこと

いずれJSONファイルの中身はそれぞれ変更するため、テキストファイルとしてコピーしようと考えました。
こちらを参考に、C言語でのコードを作成しました。

C

1#include<stdio.h> 2 3int main(void) 4{ 5 //fcopy関数の実行 6 for(int n = 1; n < 12; n++){ 7 8 for(int m = 1; m < 31; m++){ 9 const char *fnamer = "events-1-1.txt"; //コピー元のファイル名 10 //const char *fnamew = ("events-1-2.txt"); //コピー後のファイル名 11 const char *fnamew = ("events-%d-%d.txt",n,m); //コピー後のファイル名 12 fcopy(fnamer, fnamew); //fcopy関数の実行 13 } 14 } 15 return 0; 16} 17 18//fcopy関数(テキストファイルをコピーする関数) 19int fcopy(const char *fnamer, const char *fnamew) 20{ 21 int c; 22 FILE *fpr = fopen(fnamer, "rb"); 23 FILE *fpw = fopen(fnamew, "wb"); 24 if (fpr == NULL || fpw == NULL) { 25 printf("file open error!\n"); 26 return -1; 27 } 28 29 while ((c = fgetc(fpr)) != EOF) { 30 fputc(c, fpw); //fputc関数でファイルポインタ[fpw]を1バイトずつ動かしながらデータ[c]を格納していく 31 } 32 fclose(fpw); 33 fclose(fpr); 34 35 return 0; 36}

コメントアウトしてある部分

C

1const char *fnamew = ("events-1-2.txt"); //コピー後のファイル名

のように、一つのコピー後のファイル名を指定するときちんと同じディレクトリにコピーされたファイルが作成されるのですが、
for文で連続して行われません。

ターミナル上ではコンパイル、実行ともにエラーはないのですが、
コピーファイルが作成されずに実行終了してしまいます。

追記

宣言の仕方を変えてみましたが、File open errorになってしまいました。

C

1 char newname; 2 sprintf(newname,"events-%d-%d.json",n,m); //コピー後のファイル名 3 const char *fnamer = "events-1-1.json"; //コピー元のファイル名 4 const char *fnamew = newname; 5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2019/12/06 07:21

質問は「可能ですか?」でいいんでしょうか
jimbe

2019/12/06 07:23

> const char *fnamew = ("events-%d-%d.txt",n,m); 文字列の編集方法をお調べください.
退会済みユーザー

退会済みユーザー

2019/12/06 07:30 編集

@ozwkさん JSONファイルをそのままコピーすることが可能であればその方法を教えていただきたいです… 不可能でしたらテキストファイルとしてコピーしようと考えています
jimbe

2019/12/06 08:16 編集

ご提示のコードが, テキストファイルとしてコピーするコードです. コメントにも fcopy関数(テキストファイルをコピーする関数) とはっきり書いてあります. 単に, ファイル名の生成が出来ていないので実行に失敗しているだけです.
退会済みユーザー

退会済みユーザー

2019/12/06 08:35

@jimbeさん ご丁寧なアドバイスをありがとうございました!
guest

回答2

0

ベストアンサー

const char *fnamew = ("events-%d-%d.txt",n,m); //コピー後のファイル名

これではファイル名は作れません
fnamew に何がはいってるのか確認されてみては

そもそもJSONファイルというのはテキストファイルです。
ふつーにコピーすればいいだけです

投稿2019/12/06 07:24

編集2019/12/06 07:25
y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/06 07:54

JSONファイルがそのままコピーできることは理解しました。 fnamewの中身は確かに確認できません。 ファイル名の指定に変数を用いたい場合にどうしたらよいのか分かりません…
y_waiwai

2019/12/06 08:01

ファイル名のバッファを用意しといて、sprintf関数などでファイル名を生成しましょう
退会済みユーザー

退会済みユーザー

2019/12/06 08:35

できました!ありがとうございます!!
guest

0

C

1 char newname[31]; 2 sprintf(newname,"events-%d-%d.json",n,m); //コピー後のファイル名 3 printf("%s",newname); 4 const char *fnamer = "events-1-1.json"; //コピー元のファイル名 5 const char *fnamew = newname;

とすることで、無事ファイルの生成に成功しました!

投稿2019/12/06 08:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問