質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Q&A

解決済

7回答

11752閲覧

C言語で、ファイルを読み込む。

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

0グッド

1クリップ

投稿2016/07/04 12:54

編集2016/07/04 13:29

###前提・実現したいこと
Excelファイルを読み込んで、列と列を入れ替える(例:A列とB列を入れ替える)ソースを書きたいのですが、ファイルを読み込んだあと、Excelの列の扱いがわかりません。教えて頂きたいです。

###試したこと
fopenでファイルを開き、scanfではなくfgetsを使いたいのですがそのあとが分かりません。

C言語

1FILE *fp,*fp2 2 3int main (void) 4{ 5fp=fopen("Book.csv","r"); 6fp2=fopen("result.csv","r");//結果記入用 7 8 if( fp == NULL ){ 9 printf( "%sファイルが開けません¥n", "Book.csv"); 10 return -1; 11 } 12 13/*この部分が分かりません 14scanf(); 15printf(); 16*/ 17 18 19fclose(fp); 20fclose(fp2); 21 22return(0); 23}

###補足情報(言語/FW/ツール等のバージョンなど)
Visual stadioのCを使っています。

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

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

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

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

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

Chironian

2016/07/04 13:05

現在、どこまでできてますか? できれば現在のソースを提示ご下さい。それと.xlsファイルの場合はC言語では難易度が高すぎると思います。もしかすると、処理したいのは.csvファイルではないでしょうか?
guest

回答7

0

ベストアンサー

こんにちは。

fgets()で読み込んだ文字列をstrtok()で分解すると簡単ですよ。
ちょうど良いサンプルがありました。fgetsを使ってファイルを読み込むの「CSVファイルの読み取り」が参考になると思います。

後、array[i]をprintf()する際に、i == Aの時はarray[B]、i == Bの時はarray[A]、それ以外の時はarray[i]を出力すればよいです。
また、arrayの最後を出力する時はprintf("%s\n", array[i]);を使えば良いですね。

投稿2016/07/04 13:39

編集2016/07/04 13:42
Chironian

総合スコア23272

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

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

退会済みユーザー

退会済みユーザー

2016/07/25 10:29

お返事遅くなってすみません。参考にさせていただき、解決することができました。有難うございました!
guest

0

再度登場

先ほどはできない、難しいという前提書いてしまいましたが、やるとしたらXLSXに関して言えば、
SDKが提供されているので、これを使うのが現実的です。

Open XML SDK 2.5 for Office へようこそ

実際には、これでも低レベルなAPIですので、ラッパーライブラリを開発している人がいます。

ClosedXMLでxlsxファイルの読み書きを行う

この辺使いこなせれば、無理ではないと思います。
(C言語で直接使えるかは分かりません、すいません)

COMを例に挙げられてる方も多いですが、ちょっと古いような気もします ^_^;

投稿2016/07/04 14:02

編集2016/07/04 14:04
Mr_Roboto

総合スコア2208

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

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

0

まず、Excelがインストールされている環境でExcelファイルを操作したいのか、Excelがインストールされていない環境でExcelファイルを操作したいのかで、大きく対応方法が変わってきます。

Excelがインストールされている環境であれば、すでに回答があるようにCOM経由でExcelの機能を使用してExcelファイルを操作するのが一般的です。(C言語での処理が必須でなければ、ExcelのVBAや、VBScriptなどを使用した方が楽です)

Excelがインストールされていない環境であれば、Excelのファイル仕様を自分で理解して、ファイルの中身を解析操作となり、相当の技術スキルが必要になってきます。
(Officeのファイルフォーマットについては、MSが仕様を公開しています)

https://codezine.jp/article/detail/2250

https://msdn.microsoft.com/ja-jp/library/office/gg615407(v=office.14).aspx

投稿2016/07/04 13:52

KenjiToriumi

総合スコア344

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

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

0

Excelって、バージョンにも依りますが、誤解を恐れず極めてザックリとした表現をすると、複雑なxml形式のファイルをzipでアーカイブしたバイナリファイルなので、単純にfgetsで読み込んで簡単に操作出来るようなモノではありません。

もちろん、やって出来なくは無いですが非常に面倒なので、普通はやらない(わざわざC言語を使ったりしない)と思います。

もし必要があってどうしてもC言語を使用する必要があるのであれば、少しはご自身で調べて実際に試してからご質問なさった方が回答が得られやすいと思います。

「C言語、Excel」のようなキーワードで検索しただけでも、色々と情報が得られると思いますので。

ソースを何も示さず丸投げの質問では嫌われてしまいますよ~

ちょっと検索しただけでも下記のようなページが見つかりますので、まずはその内容を参考に、少しトライしてみてはいかがですか?

COM を学ぶ(6) : C言語でExcel を操作する

ちなみに、上記のページに記載されている内容がチンプンカンプンな状態であれば、仮に具体的な回答を得られたとしても理解できないと思います。

投稿2016/07/04 13:29

pi-chan

総合スコア5936

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

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

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

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

0

Excelファイルをそのまま扱うのは初心者には無理です。
Excel側で、CSV形式か、タブ区切りテキスト形式で保存して、それをCで処理してください。
fgetsした後で、入力した文字列を先頭から見ていって、カンマとか、タブが出てきたらそこで別の列だと判断できます。

投稿2016/07/04 13:07

otn

総合スコア84555

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

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

0

こんばんは、初めての質問ですね。 よろしくお願いします。

質問するときのヒント を読んでなければ一度読んでみてくださいね、

Excelのファイルは、構造が大変複雑なので簡単に読み書きできるものではありません。
古いXLS形式の場合、バイナリ形式で仕様はオープンにされていますが、英語のドキュメントを読み解く必要があります。
XLSX形式の場合は、ZIPファイルの中にXMLファイルやその他のリソースファイルが格納されていますので、これも仕様を調べて処理を行う必要があります。

310miriさんがC言語に対してどれくらいのスキルをお持ちかは分かりませんが、テキストファイルの読み書きは普通にできますでしょうか?

それがまだ難しいようなら、まずそちらが自由にできるようになってからExcelに挑戦した方がいいと思います。
それくらい余裕だよ!という場合は、現在作ったソースを質問に追記する形のほうが適切な回答を得られると思います。

丸投げと思われる質問は、すぐにマイナスを付けられてしまうので、誰も楽しくありません。
スキルアップの役に立つやり取りがしたいわけです。

今どれくらいわかっていて調べたりして、頑張ってみたけど分かりませんというような質問は、
皆さんとても良く回答してくれますので、そのような質問を頂けるといいなと思います ^^

投稿2016/07/04 13:07

Mr_Roboto

総合スコア2208

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問