親子におすすめの新型プラネタリウムとは?

「 , 」で区切られたCSVファイルの中で、「 , 」カンマを使いたいのですが、可能でしょうか?

具体的には「これは1,500円でした。」というように、CSVファイルに収められた文章内で出てくる半角の数字(お金)の区切りに使いたいのです。
全角では代用したくないのですが、CSVファイルでデータを受け渡しする際に、困っています。

例えば、特殊文字などで対応可能でしょうか?

A 回答 (4件)

受け渡しに使うと言うことは相手方のアプリケーションのことも考えなければいけないのですが・・・とりあえず対応が簡単そうな方法を。



1.各セルを""で囲む。(もちろんデータにダブルクォートがある場合はカンマと同様に困ります。
2.カンマで区切らずにタブで区切る。(比較的使われない文字ですが、やはりデータ中にタブがあるとカンマと同様です)

難しいけれど完璧に対応するためには、データ中の区切り文字は特殊な文字列に変更し、受け取り側のアプリケーションではその特殊な文字列をデータ中の区切り文字として扱うという方法が使われます。
例えば、データ中のカンマは\,にするとか。

データ作成側、受け取り側でそれぞれどこまで対応できるのか分かるともっと簡単かつ具体的な方法を回答できるかも知れません。

この回答への補足

追加質問になってしまいますが、もしよろしければ教えてください。
カンマやタブ以外の区切り文字、と言ったときに、 \, は結構メジャーなんですか?
\ は半角のバックスラッシュですよね? 半角の円マークと同じですか?

補足日時:2004/10/24 18:21
    • good
    • 1
この回答へのお礼

今回はcrumさんが教えてくれた、2.のタブ、もしくは3.の特殊文字列でやってみようと思います。
いろいろな案、ありがとうございました。

お礼日時:2004/10/25 21:54

#2で回答したものです。


>カンマやタブ以外の区切り文字、と言ったときに、 \, は結構メジャーなんですか?
\,は適当です。Unixのエスケープシーケンスっぽく書いてみました。

>\ は半角のバックスラッシュですよね? 半角の円マークと同じですか?
日本語環境だと円マーク、英語環境だとバックスラッシュですね。

おそらくWindowsに慣れている方だと#3さんの回答の""で囲む方法が見慣れたものなのではないかと思います。
(Excelとかも勝手にそういうデータを作ってくれるかもしれません)

Unix系だと\を対象の文字の前につけることで、特殊文字を普通の文字として扱うという処理に慣れていると思います。
    • good
    • 2

CSVは「データがカンマで区切られている」以外のルールは、好き勝手に決めているみたいな感じですね。


Excelの場合、カンマ入りの文字列は、"(ダブルクォーテーション)でくくっています。じゃダブルクォーテーションはどうするのかというと、""(2つ並べる)になります。改行コードも文字列の中に入れてしまうので、データを受けた側は改行で1レコードと決めるわけにもいきません。。。
全角カンマで渡して、受ける側で数字の間にある全角カンマを半角に変換するというのもいい手だと思いますよ。
どうやるにしても、受け渡しの渡される方で対応できるようにしてやらないとだめですね。
    • good
    • 0
この回答へのお礼

全角カンマを後ほど半角に変換、というのも一手ですね。(ふむふむ)
半角カンマでどうしても区切る、ということになったら、この手を使わせていただきたいと思います。
ありがとうございました。

お礼日時:2004/10/25 21:56

例えば



商品,価格,数量,コメント
ノート,150,10,これは1,500円でした。

の場合

"ノート",150,10,"これは1,500円でした。"

とすれば、最後のコメントはカンマも文字列として
扱われます。

ただし、相手側のプログラムが、これに対応している
必要があります。
Excelなどでは問題なく開けますし、Accessにインポート
する場合も問題ありません。
問題は、クォート=文字列と判断していないような自前の
プログラムを使用している場合です。
MS系のプログラム以外では、不可と考えた方がよいでしょう。

いずれにせよ、うまく行くかどうかの確認は必要です。
    • good
    • 0
この回答へのお礼

すばやい回答、ありがとうございました。
Excelの場合(およびマイクロソフト系列の場合)はこの方法も使わせていただきます。

お礼日時:2004/10/25 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qデータにカンマが入ったCSVデータのread方法

VBにてCSVデータを読み込むロジックを組んでいるのですが
データの中にカンマが入ったものがたまにあります。
通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。
たとえばCSVデータが下記の場合
123,de-ta,12,000,jjjj
実際のデータは
123
de-ta
12,000
jjjj
ですが
12,000を2個のデータと認識して
123
de-ta
12
0000
jjjj
のようになってしまいます。
どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。
よろしくお願い致します。

Aベストアンサー

こんにちは
そのアプリは、固定長出力はできないでしょうか。
二重引用符もだめだとすると、規則性を利用してロジックで分けるしかありません。
例えば・・
Line Input で1行ずつ取り込み。
念のためカンマの数をカウントしてみる。
カンマの位置で、データを切り出す。Instr()かVB6のSplit()で。
IsNumeric(str)を利用して、データが数値か文字列かを判断する。
例ですと、数値の後ろの項目は文字列になっているので、文字列が後ろに来たら、そこまでの数値を連結する。
てな具合です。
では!

Qカンマ区切りの数字をCSVファイルにインポートする時どうすれば?

カンマ区切りで区切られた金額を
CSVファイルにエクスポートなどする時は、
どうやって、カンマの区切りを判別するのですか?

Aベストアンサー

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例えば334,455のセルには値はカンマが省かれています。
(3)だいたい、数値を表示するソフトは、値はカンマなしで保持し、画面や印刷するときに、カンマを入れるものです。
(4)(2)において3桁ごとのカンマを入れるだけにすると、項目区切りのカンマと区別がつかなくなりますが、
それでそのために前後をダブルクオーテーションでくくる
約束です。
(5)むしろCSVファイルの基本は、1項目の前後をダブルクオーテーションで括るのが原則なのですが、数値の場合省略できると言う約束になっている形式が多いです。しかし3桁ごとのカンマを入れるとすると、原則に戻らざるを得ません。

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例え...続きを読む

Qダブルクォーテーションを含む正規表現について。

正規表現によるマッチング(?)を勉強しています。

例えば「blog」という文字列で、マッチングを試みる場合は、
String str = "blog";
で、strに格納すると思うのですが、例えば「link rel=""」という文字列でマッチングを試みる場合はどうすればいいのでしょうか?
「""」の部分をそのまま文字列のダブルクォーテーションの中に入れると、エラーになってしまうので、何か別のやり方が必要だと思うのですが、わかりません…。

Aベストアンサー

もとい

”abc"abc”は”abc\"abc”と記述します

Q正規表現で囲まれた部分の文字列

正規表現でダブルコーテーションで囲まれた部分の文字列
を検索したいのです。
\"([^\"])*\"
とりあえずこんな感じで検索はできるのですが
問題はダブルコーテーションで囲まれた部分の
エスケープ文字\の判定が上手くできません。
([^\"])
この部分でダブルコーテーション以外の文字列、
ただし\"は除くって感じにしたいのですがどうすれば良いでしょうか。
宜しくお願いします。

正規表現のエンジンはBREGEXP.DLLです。
http://www.hi-ho.ne.jp/babaq/bregexp.html

Aベストアンサー

([^\"])

(\\\"|[^\"])
としたらでどうでしょうか。

Q別ファイルのfunctionの読み込み方

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために私が最初に書いたhtmlの文です(もちろん実行できませんでした)
------------------------------------
<html>
<script language="javascript" src="hello.js">
aisatsu(){
document.write(aa);
}
</script></html>
------------------------------------

こんにちは
外部ファイル hello.js
-----------------------------
function aisatsu(){
var aa="hello"
}
-----------------------------
というファイルが存在した時にjikkou.htmlでaaの値、”hello”を呼び込みたい場合はどう記述すればよいのでしょうか?htmlのなかでaisatsu()をどこに記述していいのか分かりません。どうか教えてください。ただ、hello.jsのほうは実際の記述を簡略化したものであるのでそちらのほうはいじれません。

宜しくお願いします。

必要ないかもしれませんが、念のために...続きを読む

Aベストアンサー

function内で「var」をつけて変数を宣言するとfunction外からその変数の内容を取得することができなくなります。(returnで参照することはできます。)
なので変数の内容を取得する場合は「hello.js」の内容を

function aisatsu(){
var aa="hello";
return aa;
}

このように修正し、

<script language="javascript" src="hello.js"></script>
<script language="javascript">
var data=aisatsu();//「aisatsu()」関数の「aa」変数内のデータを引っ張り出す(return aa;)
document.write(data);//書いたり
alert(data);//アラートしたり
window.status=data;//ステータスバーに表示したり・・
</script>

QデータベースのINT型項目にNULLはNG?

以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか?

現在不動産の物件データを登録するためのシステムを作成しており、
データベースの設計を行なっている最中なのですが、
例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。
※データベースはMySQLになります。

ただし、
物件データ登録時に数字項目に何も入力されなければ「NULL」、
0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。
※0を入力されている場合には「0」をそのまま入れたいです。

INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。

ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。

Aベストアンサー

物件データ登録時に数字項目に何も入力されなければ「NULL」、0を入力されている場合には「0」
本来の意図としては正しいはずです。
Nullは本来、どの値を入れればいいのかわからない値ということなので、
数字がわからない=何も入力していない ということで、Nullを指定するのは正しいはずです。
しかし、
実際に使うときには、Nullは実に不自由なので、
Nullは使うなという話がでてきます。
## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。

というのは例えば、
金額 100万以上の物件は何件?
というSQLに対して、100件と答えがでて、
金額 100万未満の物件は何件?
というSQLに対して、50件と答えがでたとします。
じゃあ、全物件は?・・・172件だったりします。
何故?⇒Nullが22件だったためです。
(Nullは0とは違い、どちらの検索条件にも含まれません。)
・・・この不自由さを回避するために数値項目に、Not Null制約をつけることが多いです。

QOracle 8i コンマ(,)を含むデータをinsertしたい

再度、質問させていただきます。

コンマを含むデータをinsertするにはどうしたらよいでしょうか?
例えば、次のようなテーブルを作成します。
CREATE TABLE SAMPLE
(NAMEVARCHAR( 15)NOT NULL,
ADDRESSVARCHAR(30));

そして、

insert into sample
values
(Yamada, '731 Fondren,Houston,TX');

とinsertすると当然エラーになります。”ORA-00984: ここでは列は使用できません”というエラーが返ってきます。

"731 Fondren,Houston,TX"というコンマを含むアドレスをinsertしたいのですが、どうしたらよいでしょうか?

set scan off をしてもダメで、
'[731 Fondren,Houston,TX]'という風に変えても、上と同じ”ORA-00984: ここでは列は使用できません”というエラーが返ってきます。グーグルで調べて、arrayof(text)という風にタイプを変えるのかなと試しましたが、だめでした。

何かアドバイスをお願いします。

再度、質問させていただきます。

コンマを含むデータをinsertするにはどうしたらよいでしょうか?
例えば、次のようなテーブルを作成します。
CREATE TABLE SAMPLE
(NAMEVARCHAR( 15)NOT NULL,
ADDRESSVARCHAR(30));

そして、

insert into sample
values
(Yamada, '731 Fondren,Houston,TX');

とinsertすると当然エラーになります。”ORA-00984: ここでは列は使用できません”というエラーが返ってきます。

"731 Fondren,Houston,TX"というコンマを含むアドレスをinsertしたいのですが、どう...続きを読む

Aベストアンサー

insert into sample
values
('Yamada', '731 Fondren,Houston,TX');
としてください。

QCSV出力して、MS/EXCELで開くとカンマ区切りがされてない

こんにちわ。

業務で、WEBレポーティングツールをいじっております。(特定のレポートを社内以外の人にブラウザで閲覧できるツール)

サーバーでDBよりデータ参照、レポート作成等の処理をしてクライアントにHTMLレポートを出力するという構造です。そのソフトにはサーバーでレポート閲覧やエラーなどの監査ログを残す機能があり、CSVファイルで出力されるのですが、ちょっと表示がおかしいのです。

そのCSVファイルをテキスト形式で開くと正しく表示されるのですが、MS/EXCEL2000で開くとカンマで区切られておらず、一行のデータが一つのセルにはいってしまいます。

具体的に言うと
A1セルに、「ABC,2000/01/08,あいうえお」
A2セルに、「DEF,2000/01/09,かきくけこ」
・・・・

なぜこういう現象が起きるのか検討しているのですが、文字コードが異なっているか、些細なゴミのようなものが混入されているか不明です。

ソフト会社に人に質問をしても、未だ回答がこないです。ただ、仕様によると吐き出すCSVファイルは、「unicodeでエンコーディングされている」ということはわかりました。

また、MS/ACCESS2000でそのCSVファイルをインポートすると、日付&数値の項目は、インポートエラーとなり読み込みできません。(文字は問題無し)

そのソフトは、米で販売されてた物を日本語仕様に直して販売しています。

上記の状況なのですが、どのように原因を推測されますでしょうか?
よろしくお願い致します。

こんにちわ。

業務で、WEBレポーティングツールをいじっております。(特定のレポートを社内以外の人にブラウザで閲覧できるツール)

サーバーでDBよりデータ参照、レポート作成等の処理をしてクライアントにHTMLレポートを出力するという構造です。そのソフトにはサーバーでレポート閲覧やエラーなどの監査ログを残す機能があり、CSVファイルで出力されるのですが、ちょっと表示がおかしいのです。

そのCSVファイルをテキスト形式で開くと正しく表示されるのですが、MS/EXCEL2000で開くとカンマで区切ら...続きを読む

Aベストアンサー

基本的なことですが、拡張子は.csvに成ってるのでしょうか?

それから、「MS/EXCEL2000で開く」とは、どのように開いているのでしょうか?
・Excelのメニューから開く
・エクスプローラーからDrug&Drop
・ファイルをダブルクリック
・エクスプローラーから「アプリケーションから開く」
等など
これに、よっても多少動きが違うような気もします。

Q【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim 行数 As Long, 列数 As Integer
Dim i As Integer, j As Long, k As Long

ファイル名 = "test.csv"
フォルダ名 = "csv"
パス名 = ActiveWorkbook.Path & "\" & _
フォルダ名

'csvフォルダが存在しなければ作成する
If Dir(パス名, vbDirectory) = "" Then
MkDir パス名
End If
ChDir パス名

Open ファイル名 For Output As #1

For i = 1 To Worksheets.Count
Worksheets(i).Activate
Worksheets(i).Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
行数 = Selection.Rows.Count
列数 = Selection.Columns.Count

For j = 1 To 行数
For k = 1 To 列数 - 1
データ = Selection.Cells(j, k) _
.Value
Write #1, データ;
Next k
Write #1, Selection.Cells(j, 列数) _
.Value
Next j
Next i
Close #1
End Sub

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim ...続きを読む

Aベストアンサー

Write # は文字列を""で囲んで出力する仕様になっています。
そのまま出力したければ、Print #を利用すればよろしいかと。
ただし、Printの場合は区切り文字(カンマ)を自動で出力してくれませんので、併せて出力する必要があります。

For j = 1 To 行数
  For k = 1 To 列数 - 1
    データ = Selection.Cells(j, k) .Value
    Print #1, データ; ",";
  Next k
  Print #1, Selection.Cells(j, 列数).Value
Next j

なお、いらぬおせっかいですが、ドライブが複数ある環境下だと、
 ChDir パス名
だけでは必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。
 Open パス名 & "\" & ファイル名 For Output As #1
のように、フルパスで指定しておいた方が確実かと…

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング