エクセルでの文字読み込みについて
-
コレジャナイ
エクセルでの文字読み込みについて
度々失礼します。
お陰様でマップに関してはエクセルからデータを読み取る事が出来る様になりました。
続きましてキャラのステータスの読み込みに挑戦しておりました。
このステータス情報は 「キャラ名称(文字)、攻撃力(数字)」 といった感じに文字と数字が一緒になっているエクセルデータで御座います。
これをダメ元ながらFileRead_getcで読み込んだ所、strcpyを使い文字を読み込む事に成功してしまいました。
(getcは1バイトしか読めず、全角文字は正常に読み込めませんと注意書きがあったため、失敗すると思っておりました。)
どうも胡散臭いなとは思いつつ、strcpyでは警告文が出る(古い関数のため?)ために、strcpy_sに置き換えた所案の定エラーが発生しました。
Expression:(L("Buffer is too small" && 0)
と表示され強制終了してしまいます。(警告文は消えました。)
エラーなるだろうなぁと思っていたので、これにはあまり驚かなかったのですが、
strcpyを使っていた箇所は二か所あり、もう片方のstrcpyにだけに_sを追加すると上記エラーは発生しませんでした。(かつ正常に読み込めていました)
エクセルデータもその部分の関数もほぼ同じだったため、何故片方だけエラーで弾かれるのか全く皆目見当がつかず、質問させて頂きました。
収納する配列の大きさから、エクセルデータ内での文字の数、エクセルデータを収納する配列の大きさまで全て同じ条件です。
何が原因なのでしょうか・・・。
また文字と数字がまぜこぜになっているエクセルデータを各要素に代入する場合の上手い方法など御座いましたらご教授下さい。
(getsを使って四苦八苦していたのですが、挫折しましたorz)
それと合わせまして、文章の読み込みについて。
やはりノベルゲーなどの文章はgetsを使い、テキスト形式のファイルなどから読み込んでいるのでしょうか?
エクセルにこだわる必要はないのですが、何かとエクセル形式が使い易いもので・・・。
お陰様でマップに関してはエクセルからデータを読み取る事が出来る様になりました。
続きましてキャラのステータスの読み込みに挑戦しておりました。
このステータス情報は 「キャラ名称(文字)、攻撃力(数字)」 といった感じに文字と数字が一緒になっているエクセルデータで御座います。
これをダメ元ながらFileRead_getcで読み込んだ所、strcpyを使い文字を読み込む事に成功してしまいました。
(getcは1バイトしか読めず、全角文字は正常に読み込めませんと注意書きがあったため、失敗すると思っておりました。)
どうも胡散臭いなとは思いつつ、strcpyでは警告文が出る(古い関数のため?)ために、strcpy_sに置き換えた所案の定エラーが発生しました。
Expression:(L("Buffer is too small" && 0)
と表示され強制終了してしまいます。(警告文は消えました。)
エラーなるだろうなぁと思っていたので、これにはあまり驚かなかったのですが、
strcpyを使っていた箇所は二か所あり、もう片方のstrcpyにだけに_sを追加すると上記エラーは発生しませんでした。(かつ正常に読み込めていました)
エクセルデータもその部分の関数もほぼ同じだったため、何故片方だけエラーで弾かれるのか全く皆目見当がつかず、質問させて頂きました。
収納する配列の大きさから、エクセルデータ内での文字の数、エクセルデータを収納する配列の大きさまで全て同じ条件です。
何が原因なのでしょうか・・・。
また文字と数字がまぜこぜになっているエクセルデータを各要素に代入する場合の上手い方法など御座いましたらご教授下さい。
(getsを使って四苦八苦していたのですが、挫折しましたorz)
それと合わせまして、文章の読み込みについて。
やはりノベルゲーなどの文章はgetsを使い、テキスト形式のファイルなどから読み込んでいるのでしょうか?
エクセルにこだわる必要はないのですが、何かとエクセル形式が使い易いもので・・・。
Re: エクセルでの文字読み込みについて
このエラーはバッファが小さすぎる、つまり確保したメモリに入れようとしたが確保されたメモリが小さすぎて入らないですよ、ということです。コレジャナイ さんが書きました: Expression:(L("Buffer is too small" && 0)
もう一度確かめてみてください、どこかで違っているはずです。
余談ですが、キャラの情報をエクセルに入れると第三者が書き替えてゲーム進行に影響が出る気がします…
Dango San
-
hidden
Re: エクセルでの文字読み込みについて
ノベルあたりは自分でxmlみたいな形のを作ったりがいいんじゃないですか?
ちょっと前にほかのトピックに出ていた『ゲームプログラマになる前に覚えておきたい技術』って本はxmlモドキを作る章がありました。
ほかにもいろいろ乗ってて読んでていい本だと思いました。まぁ私みたいなへぼが読んで思ったことなので参考程度に・・・
書き換えられる可能性については気にしなくてもいいんじゃないでしょうか。
私だったらその人の自己責任ならそんなとこまで弄くり倒して遊んでもらえたら本望ですね(笑)
ちょっと前にほかのトピックに出ていた『ゲームプログラマになる前に覚えておきたい技術』って本はxmlモドキを作る章がありました。
ほかにもいろいろ乗ってて読んでていい本だと思いました。まぁ私みたいなへぼが読んで思ったことなので参考程度に・・・
書き換えられる可能性については気にしなくてもいいんじゃないでしょうか。
私だったらその人の自己責任ならそんなとこまで弄くり倒して遊んでもらえたら本望ですね(笑)
Re: エクセルでの文字読み込みについて
全角文字について。コレジャナイ さんが書きました:これをダメ元ながらFileRead_getcで読み込んだ所、strcpyを使い文字を読み込む事に成功してしまいました。
(getcは1バイトしか読めず、全角文字は正常に読み込めませんと注意書きがあったため、失敗すると思っておりました。)
全角文字は一般に複数のバイトで1文字を表します。例えばShift_JISの場合は2バイトで1文字を表します。
FileRead_getcのリファレンスには
とありますが、これが意味するのは、全角文字を構成する複数のバイトのうち1バイトしか取得できませんよ、ということです。DXライブラリリファレンス さんが書きました: 正常に読み込めるのは1バイト文字だけで、一文字2バイトの全角文字などは正常に読み込めません。(1バイト目だけが返ってきます)
Shift_JISの場合、FileRead_getcを2回連続で読みだすことにより、全角文字1文字を正常に読みだすことが可能なのです。
-
コレジャナイ
Re: エクセルでの文字読み込みについて
>>だんごさん
やはりそうですよね・・・。
確保した配列の大きさが[30]、入れようとしている配列の大きさが[20]のため、どう頑張ってもオーバーしないと思うのですが・・・何なのでしょうね。
データ改ざんについて。
大体完成し終わった後に暗号化などの処理を行おうと思っていたのですが、エクセル形式だと暗号化って不可能だったりします・・・?
そもそも一番最後に暗号化するという流れで良いのでしょうか・・・。
暗号化なんて試した事がないので、どうせにわかの知識で暗号化した所で簡単にデータ改ざんされてしまう様な気もしますが・・・。
やっぱり改ざんされてしまうのは悲しいですね。
>>hiddenさん
新しいファイル形式を自作するという事でしょうか?
ゲームプログラマになる前に覚えておきたい技術 についてはもう少しプログラムの力をつけてから読んでみる予定でした。(AI製作の前などに)
今読んでも多分猫に小判で、全く身に付かないと思われて・・・orz
確かにそこまでやり込んで下さるなら製作者冥利に尽きますね。
ただやはりある程度は暗号化しておきたいですね~・・・。
流石にエクセルファイルそのまんまバン!と置いてあったら、知識無い人ですら改ざんしちゃいますもんね。
>>beatleさん
なるほど!
という事はgetcに関しては何らエラーの原因にはならないという事ですね。
しかも普通に文字も読み込めるんですね・・・。
有難う御座います!
やはりそうですよね・・・。
確保した配列の大きさが[30]、入れようとしている配列の大きさが[20]のため、どう頑張ってもオーバーしないと思うのですが・・・何なのでしょうね。
データ改ざんについて。
大体完成し終わった後に暗号化などの処理を行おうと思っていたのですが、エクセル形式だと暗号化って不可能だったりします・・・?
そもそも一番最後に暗号化するという流れで良いのでしょうか・・・。
暗号化なんて試した事がないので、どうせにわかの知識で暗号化した所で簡単にデータ改ざんされてしまう様な気もしますが・・・。
やっぱり改ざんされてしまうのは悲しいですね。
>>hiddenさん
新しいファイル形式を自作するという事でしょうか?
ゲームプログラマになる前に覚えておきたい技術 についてはもう少しプログラムの力をつけてから読んでみる予定でした。(AI製作の前などに)
今読んでも多分猫に小判で、全く身に付かないと思われて・・・orz
確かにそこまでやり込んで下さるなら製作者冥利に尽きますね。
ただやはりある程度は暗号化しておきたいですね~・・・。
流石にエクセルファイルそのまんまバン!と置いてあったら、知識無い人ですら改ざんしちゃいますもんね。
>>beatleさん
なるほど!
という事はgetcに関しては何らエラーの原因にはならないという事ですね。
しかも普通に文字も読み込めるんですね・・・。
有難う御座います!
Re: エクセルでの文字読み込みについて
「エクセル形式」(csvではない)にはパスワードを付けられます。コレジャナイ さんが書きました:エクセル形式だと暗号化って不可能だったりします・・・?
そうでなくても、自分でDESやAESなどを実装するか、ライブラリを使えば暗号化できるはずです。
AESとDESのライブラリは、ここで配布しています。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: エクセルでの文字読み込みについて
ちなみに勘違いしていそうなので補足しておくと、Shift-jisコードにおいて全角は2バイト半角は1バイトで混在可能です。
ちゃんと読み込むためには、文字コードの知識がないと思わぬ文字化けを引きをこすことになります。
と言うことで今回はShift-jisコードを勉強して半角や全角を判断する方法などを勉強して下さい。
コレが分かればgetsでもFileRead_getcでもやることは同じです。
ちなみにDXライブラリの関数は暗号化ファイル機能であるアーカイブ機能があります。
「DXライブラリ置き場 ミニテク」
http://homepage2.nifty.com/natupaji/DxL ... c.html#T11
その場合、FileRead_getcであればアーカイブファイルから読み込めるはずです。
ちゃんと読み込むためには、文字コードの知識がないと思わぬ文字化けを引きをこすことになります。
と言うことで今回はShift-jisコードを勉強して半角や全角を判断する方法などを勉強して下さい。
コレが分かればgetsでもFileRead_getcでもやることは同じです。
ちなみにDXライブラリの関数は暗号化ファイル機能であるアーカイブ機能があります。
「DXライブラリ置き場 ミニテク」
http://homepage2.nifty.com/natupaji/DxL ... c.html#T11
その場合、FileRead_getcであればアーカイブファイルから読み込めるはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
コレジャナイ
Re: エクセルでの文字読み込みについて
>>みけCATさん
csvは無理なんですね・・・。
ゲームが完成もしてないのに暗号化の話なんて早すぎるでしょうし、まずはもぞもぞ完成に向けて頑張ってみます。
>>ソフト屋さん
文字化けが起こりました!
文字化けというより ・ が表示されてしまうだけですが。
Shift-jisコードをぐぐって色々眺めていましたが、どうやら ・ になってしまう数字アルファベットの組み合わせが結構多いみたいですね。
恐らく文末などに余分な1バイト分の数字やら何やらが入ってしまった事が原因だと思うので、これを取り除きたいのですが、まずprintfで配列を表示してみました。
しかし%Sを用いて表示させてみたのですが、文末の ・ は表示されませんでした。
DrawFormatStringを用いている事が原因なのでしょうか・・・?
この後少々外出の予定があるため、帰宅次第考え直します。
DXライブラリのアーカイブ機能かなり便利そうですね!
有る程度プログラムを進めてからでも出来そうですし、少なくとも完全な素人避けにはなりますね。
返信有難う御座います。
平95BD
csvは無理なんですね・・・。
ゲームが完成もしてないのに暗号化の話なんて早すぎるでしょうし、まずはもぞもぞ完成に向けて頑張ってみます。
>>ソフト屋さん
文字化けが起こりました!
文字化けというより ・ が表示されてしまうだけですが。
Shift-jisコードをぐぐって色々眺めていましたが、どうやら ・ になってしまう数字アルファベットの組み合わせが結構多いみたいですね。
恐らく文末などに余分な1バイト分の数字やら何やらが入ってしまった事が原因だと思うので、これを取り除きたいのですが、まずprintfで配列を表示してみました。
しかし%Sを用いて表示させてみたのですが、文末の ・ は表示されませんでした。
DrawFormatStringを用いている事が原因なのでしょうか・・・?
この後少々外出の予定があるため、帰宅次第考え直します。
DXライブラリのアーカイブ機能かなり便利そうですね!
有る程度プログラムを進めてからでも出来そうですし、少なくとも完全な素人避けにはなりますね。
返信有難う御座います。
平95BD
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: エクセルでの文字読み込みについて
Shift-JISの場合は先頭1バイト目で全角文字か半角文字かを判別できます。と言うよりして下さい。
全角だとわかったら続けてもう1バイト読み込みます。もし半角ならば、そのまま処理します。
これをちゃんとやらないと区切りの,や"も探せませんし、数値データを混在できなくなります。
ここで手を抜いてはいけません。
●参考。
「C言語プログラミングの質問です。 文字コードの全角・半角判定で悩んでいます。 - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1116019231
それと文字コードは16進数で表示して確認して下さい。
文字として表示して確認するのは文字化けしていたら調べようがありません。
全角だとわかったら続けてもう1バイト読み込みます。もし半角ならば、そのまま処理します。
これをちゃんとやらないと区切りの,や"も探せませんし、数値データを混在できなくなります。
ここで手を抜いてはいけません。
●参考。
「C言語プログラミングの質問です。 文字コードの全角・半角判定で悩んでいます。 - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa ... 1116019231
それと文字コードは16進数で表示して確認して下さい。
文字として表示して確認するのは文字化けしていたら調べようがありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
コレジャナイ
Re: エクセルでの文字読み込みについて
すみません。
手を抜く以前に判別する方法が全く分かりませんでした。
16進数の表示に関しては%xを用いるのですよね?
表示させてみましたが、明らかに桁が足りない&プログラムを起動し直すと別の値に切り替わってしまうため・・・、もう少し頑張ってみます。
参考先のURLを拝見させて頂きましたが、やはりコードの判別方法が分からないまま・・・。
手を抜く以前に判別する方法が全く分かりませんでした。
16進数の表示に関しては%xを用いるのですよね?
表示させてみましたが、明らかに桁が足りない&プログラムを起動し直すと別の値に切り替わってしまうため・・・、もう少し頑張ってみます。
参考先のURLを拝見させて頂きましたが、やはりコードの判別方法が分からないまま・・・。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: エクセルでの文字読み込みについて
んじゃ参考です。
「半角と全角の混在するShiftJIS文字コードの扱い方(C/C++) - プログラミング講座 - fuku研究所」
http://www5f.biglobe.ne.jp/~fuku-labo/l ... /2/076.htm
「半角と全角の混在するShiftJIS文字コードの扱い方(C/C++) - プログラミング講座 - fuku研究所」
http://www5f.biglobe.ne.jp/~fuku-labo/l ... /2/076.htm
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。