• ベストアンサー

0をデータに納めたい

cgi(perl)でデータを整理し、格納しようとしています。 値が0という実数をファイル(csv)に格納したいのですが、"0"としても'0'としてもcsvファイルを開いて確認してみるとそのセルには何も入っていません(Null扱いになっているようです) データとして0を入れたい場合どうすればいいのでしょうか。 なお、全角の0ではなく半角の0を格納したいです。

  • choei
  • お礼率63% (286/451)
  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

普通は半角の「0」が null に化けたりはしません。 まず、CSVに書いた内容が悪いのか、確認のためにCSVを開いたソフト(MS-Excel?)が悪いのかを確認してください。 確認と言っても CSVをテキスト・エディタで開いて該当部分がどうなっているか見るだけです。 CSVの基本規則は守っていますよね? セル内に 「,」、「"」、改行を含む場合は、「"」を「""」に置き換えて全体を 「"」で囲むという奴です。 MS-Excel が悪い訳が無い、なんて思わないでください。 "1/2" を "1月2日" と表示する等、余計なお世話のかたまりです。

choei
質問者

お礼

ありがとうございます。 excelで開かずにテキストで開いてみましたが,,,となっており、0が入っていませんでした。 どうやらperlの記述に誤りがあるようです。 もう一度よく記述を見直します。

その他の回答 (1)

  • pevtone
  • ベストアンサー率0% (0/3)
回答No.2

試しに、 use strict; my $num = 0; my $h; open($h,">test.csv"); print $h "$num\,$num\n$num\,$num"; close($h); としてみました。 A1、A2、B1、B2、全てに0が入っています。 どういった出力になっているのかもう少し詳しく分かれば何か分かるかもしれません。 エクセルのおせっかい機能か正常に出力されていない気がします。

choei
質問者

お礼

ありがとうございます。 私も最初はExcelのお節介機能かと思ってましたが、テキストエディターで開いてみてもやはり入っていないので、perlの記述に誤りがあるようです。 もう一度よく見直します。

関連するQ&A

  • CSVデータをDBに移行するには

    Perlを使ってCSVデータをDBに移行して格納したい のですが、流れはCSVファイルを開いて、CSVファイルを連想配列に書き込んで、 DBを開いて、連想配列データをデータベースに書き込んで、DBを閉じるという 流れの考えでよろしいのでしょうか?

    • ベストアンサー
    • CGI
  • CSVデータの同じファイルに上書きするには。

    CSV形式でデータdata.csvが書いてあります。プログラムを実行して、そのファイルの$data[4]の値が5という数字だった場合は、そこのセルだけ"解除"という文字に置き換えて(ほかに入ってる値ははそのまま)data.csvに上書きしたいのですが、どうもうまくいきません。したのように記述したのですが、どこが間違っているのかがわかりません。。どなたか教えてください。よろしくおねがいします。 #!/usr/bin/perl $file='data.csv'; open(FILE, "$file"); while(<FILE>){ @data = split(/,/, $_); } close(FILE); if($data[4] eq "5"){$data[4] = "解除";} open(OUT, ">$file"); print OUT @data; close(OUT);

  • エクセルでcsvデータを自動読み込みする方法(至急)

    csv形式のファイル(内容は計測値データ)をエクセルに読み込み、csvファイルの各データが規定値内に納まっているかの確認が容易できる方法を探しています。 このとき条件として、 (1)csvファイル内のデータは10項目程度。 (2)csvデータはランダムに更新される。 (3)エクセルに読み込むときはエクセルシート内の決められたセルにそれぞれデータが格納されること。 (例)csvファイルに"110"と"119"の2種類のデータがあった場合、あらかじめxlsファイルのセルA1に「警察」、セルA2に「消防署」と記入しておき、csvファイルのデータを読み込んだとき、セルB1に"110"、セルB2に"119"と入力される。 (4)csvファイル自体は開かず、必要なときにあらかじめ作成したxlsファイルを立ち上げると、自動でcsvファイルの内容を吸い上げる。 (5)入力されたデータの適否をそれぞれ判定する。 (6)xlsファイルを立ち上げている間にcsvファイルが更新された場合、xlsファイルの更新方法は手動と自動を選択できる。 こんなこと出来るでしょうか? 特に(4)が困っています。csvファイルをエクセルで開いた状態であれば、この内容で出来たのですが・・・。 どなたか良い方法があったら教えて下さい。お願いします。

  • CSVファイルを読み込んだときに勝手に年月日になるのを防止は

    EXCEL2000 Windows版です。 CSVファイルを読み込んだとき 5-12-1のセルが2005/12/1 15-7が7月15日 に変わってしまいます。元のデータは住所の地番などです。 元のデータは全角でも半角でも同じです よろしくお願いします。

  • フォームcsvで正常にデータが反映されない

    いつもお世話になっています。 perlで作ったcgiフォームなのですが(jcode.plを使ってます)、どうも正常にデータが反映されていないようなのです。記述してもらった内容が途中で切れてしまっています。いくつか思い当たる節があったので、実験してみたところ半角二重引用符"があるとこれも含めて以降の内容が消失してしまっているようです。入力してもらっている方はドイツの方で、"を使う機会が多いように思います。対策を教えていただけたらと思います。 たとえば、【R\"ockner etc etc ...】と入力すると、csvファイルの該当箇所は【R\】とだけなって、後は消えてしまってます。 一応確認画面を出すようにしていて、そこでは問題なく画面に全文が表示されていますので、確認画面へは正常にデータが反映しているのに不思議で仕方ありません。cgiは拾ってきたソースを適当に改変して作っているので、あまり深い知識がないのですが、csvファイルに書き込む段階でエンコードかデコードが失敗してしまっているのでしょうか。他にもトラブルが起きそうな文字などがあったら教えていただけると大変助かります。

    • 締切済み
    • CGI
  • sqlite3から取り出したデータにカラム名を付与

    Perl CGIを介してsqlite3でデータベースを構築しています。 とりだしたデータを.csvにしてユーザがダウンロードできるようにしたいです。 単にselect * としてcsvを作っても、カラム名のないファイルができます。 一行目がカラム名になっているファイルを作るにはどうすればよいでしょうか? 列数が4つか5つ程度なら、Perlにそれらを固定で書き込んでやればよいのですが、 列数が多くなると(データ構造を変更した際などに)不一致がおきる危険性があります。データベースから直接定義をとりだして、それを利用できればと思うのですが。

    • ベストアンサー
    • MySQL
  • データ移行について

    oracle8iからmysql5.0にデータ移行する作業をしています。 まず、oracleからCSVファイルを出力し、mysqlでインポート、という流れです。半角カナ→全角カナ対応もしています。 ただその際、全角漢字が文字化けしてうまくインポートすることができません。 oracle8iからmysql5.0にデータ移行する、という何か分かりやすいツール等、ご存じの方いらっしゃいましたらお願いします。。

  • テキストデータでNULL?

    こんにちは。会社の人がテキストエディタでファイルを開いて、このデータはNULLが入っているからおかしいとかブツブツ言っていました。 データの中身はバイナリデータではなく、固定長、またはCSVファイルのような事を言っていました。 そこで疑問に思ったのですが、固定長、またはCSVでNULLなんてあるんでしょうか?たぶん、空文字列の事をさしてNULLと言っているような気がするのですが、テキストデータにNULLは存在するのでしょうか?

  • チェックボックスでのvalue値のスペースについて

    HTMLのformからチェックボックスで選択された値をCGIに飛ばしデータファイル(cgiファイル)に保存したいのですが、 チェックボックスのvalueを複数選択するとvalue値の間にスペースが入ってしまいます。 正確にはデータファイルをterapadで開こうとすると、 「NULL文字を含むファイルです。NULL文字は半角スペースへ変換しました。」というアラートがでてvalue値の間に半角スペースが入ってしまいます。 <チェックボックスのHTML> <input type="checkbox" name="■" value="jpn" />日本 <input type="checkbox" name="■" value="usa" />米国 ■にはデータを保存する項目の番号が入っており、一つのチェックボックスでは同じ番号が入ります。 例えば■が1なら1番に保存されます。 日本と米国を選択し送信するとデータファイル上では「jpn usa」となってしまいます。 NULL文字とはデータの値がない場合に返される値だという認識なのですが、全てのチェックボックスを選択していれば、 「jpnusa」という形で送信されるものではないのでしょうか? データを送信する際、このNULL文字による半角スペースをなくしたいのですが、何か方法はありますでしょうか? やはりCGIファイルを編集しなければ不可能なのでしょうか? ご教授よろしくお願いします。

    • ベストアンサー
    • CGI
  • ラダー回路 文字列データのCSVへの書き込み

    データレジスタD0以降に格納されたアスキーデータ"00001"をCSVファイルに書き込みたいのですが、三菱Qシリーズシーケンサだと文字列のCSV出力ができません。 仕方なくアスキーからBIN形式にしてからCSV書込みをしてみようと試みたのですが、正しい値に変換できません。(添付図参照) データを "00001" としてCSVファイルに書き込むにはどうすればよいのでしょうか?

専門家に質問してみよう