マンガでよめる痔のこと・薬のこと

CSVデータの、"(ダブルクォーテーション)を自動でなくしたいのですが、
なにか良い方法がありましたら教えてください。
"ABC"→ABCとしたいです。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

どうしても自分で作りたいのであれば、WSH(Windows Script Host)で書いてみてはどうしょうか?


WSHは、JavaScript(JScript)かVBScript(拡張子.vbs)で記述するスクリプトでWindows98以降のOSなら確実に実行できる環境になっています。

WSH入門
http://homepage2.nifty.com/pasocon/nyumon/main.h …
Windows Script Host Laboratory
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/wshtop. …
Windows管理者のためのWindows Script Host入門
http://www.atmarkit.co.jp/fwin2k/operation/wsh01 …

「VBScript - CSV ファイルを読み込む CsvReader クラス」
http://blogs.wankuma.com/jeanne/archive/2007/04/ …
を使って好きに加工すればよろしいかと。
バッチファイルの機能も記述できるので、全部WSHで書くと良いかと思います。
http://www.jfast.net/~saikawa/wsh/
    • good
    • 0

バッチファイルなら、以下のプログラムを使われた方が良いと思います。


http://www.vector.co.jp/soft/win95/util/se271454 …
このプログラムのインストールやバッチファイルの作成は問題なく可能でしょうか?

この回答への補足

回答ありがとうございます。
せっかく教えていただいたのですが、できることなら
ソフトは使わずにメモ帳などで、自作できるほうが良いのですが。

補足日時:2007/09/27 13:35
    • good
    • 0

>上記の、置換えをプログラミング化することは可能ですか?



可能です。
実際には、利用環境やプログラミング能力等を加味して考えないと行けませんけどね。

利用するアプリにマクロ等の機能があれば、そのアプリで可能かも知れません。
また、利用するアプリにマクロ等の機能が無ければ、外部のツールなど使って予め削除するしか無いでしょう。
その場合は、何らかの開発言語を使って専用ツールしたり、マクロ機能があるエディタでのプログラミングと言うことになります。

上記、いずれの場合でも「プログラミング可能」と言うことです。

『プログラミング化することは可能ですか?』という質問方法では、幅広い分野に渡ってしまうので、Yes/Noの一般的な回答しか出来ません。
    • good
    • 0

#2のzwiですが。


>上記の、置換えをプログラミング化することは可能ですか?
プログラムする気があるなら、EXCELのVBAで"のないcsvを作り出すのも方法としてあります。
読み込もうとしてるアプリ?とか具体的に情報をもらえると的確な方法が示せると思います。OSの種類と経験のあるプログラミング言語なども教えてください。それとプログラムを作ったとして日ごろの運用の手順をどう考えているのかとか。

この回答への補足

オフコンシステムを利用してまして、そのデータをCSVに変換します。
そのCSVデータは、"がくっついてきてしまいます。
今、取り込もうとしているソフトは、"があると厄介なので、
"なしのデータに変換したいと思っています。
batファイル等で、"を削除するPGMが作れたら理想です。
OSはXPProです。
コボル言語なら少しはわかる程度です。

補足日時:2007/09/27 12:50
    • good
    • 0

>具体的にはどうするのでしょうか?



例えば、Wordの置換機能。
編集-置換 メニューから、
検索文字に「"」
検索語の文字を空欄(何も入れない)で、置換します。

この回答への補足

ありがとうございます。
上記の、置換えをプログラミング化することは可能ですか?

補足日時:2007/09/27 11:57
    • good
    • 0

ツールを使えばよろしかと。


http://www.vector.co.jp/vpack/browse/pickup/pw5/ …
    • good
    • 0

エディタで開いて置換する。

この回答への補足

具体的にはどうするのでしょうか?

補足日時:2007/09/27 11:22
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

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

Qカンマ区切りのCSVファイルから""を削除したい

初めて質問いたします

以下のような形式のCSVファイルがあります
例)
品名,数量,単価,金額
"りんご",1,150,150
"バナナ",10,200,2000
"メロン","1,000","2,000","2,000,000"

上記のように、品名にはダブルクォーテションがつき、
数量、単価、金額については桁区切りのカンマが発生する場合、ダブルクォーテーションで囲まれています

上記のようなデータを
りんご,1,150,150
バナナ,10,200,2000
メロン,1000,2000,2000000
のように別ファイルへ出力するにはどのようにすればよいでしょうか?

プログラムでの処理で、WSHを使ったものを教えていただけますと、幸いです
よろしくお願いいたします

Aベストアンサー

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = BaseFolder.Path & "\" & "_NewFiles"

If oFs.folderExists(newFolder) = False Then
oFs.createFolder (newFolder)
End If

For Each f In BaseFolder.Files
If oFs.GetExtensionName(f) = "csv" Then
Call changeIt(f.Path, newFolder)
End If
Next

MsgBox newFolder & " フォルダ内を検証"


Sub changeIt(orgFname, trgFolder)
Dim oFs
Dim orgF
Dim newF
Dim newFname
Dim buF
Dim oReg

Dim Mcol
Dim M
Dim M1, M2
Const forReading = 1
Const forWriting = 2

Set oFs = CreateObject("Scripting.fileSystemObject")
Set oReg = CreateObject("VBScript.RegExp")
Set orgF = oFs.getFile(orgFname).openAsTextStream(forReading)

newFname = trgFolder & "\" & oFs.getBaseName(orgFname) & "_New.csv"
oFs.CreateTextFile (newFname)
Set newF = oFs.getFile(newFname).openAsTextStream(forWriting)

With oReg
.Pattern = """.*?"""
.IgnoreCase = False
.Global = True
End With

Do Until orgF.atendofstream
buF = orgF.readline
Set Mcol = oReg.Execute(buF)

For Each M In Mcol
M1 = Replace(M.Value, ",", "")
buF = Replace(buF, M.Value, M1)
M2 = Replace(M1, Chr(34), "")
buF = Replace(buF, M1, M2)
Next

newF.WriteLine buF
Loop

orgF.Close: newF.Close
Set Mcol = Nothing
Set oReg = Nothing

End Sub

もう仕事は終わってしまったかもしれませんが、(^^ゞ
VBS で作ってみました。
対象CSVファイルのあるフォルダに保存して実行してみてください。
_NewFilesフォルダに保存されます。
※対象外のCSVファイルが有っても処理してしまいます

Dim oSh
Dim oFs
Dim BaseFolder
Dim newFolder
Dim f

Set oSh = CreateObject("Wscript.Shell")
Set oFs = CreateObject("Scripting.FilesystemObject")
Set BaseFolder = oFs.getFolder(oSh.currentDirectory)

newFolder = Bas...続きを読む

QCSVファイルからダブルクォーテーションを削除したい。VBS使用で。

CSVファイルからダブルクォーテーションを削除したい。VBS使用で。

CSVファイルのダブルクォーテーションを外す方法が
Wendy02さん回答の
http://oshiete1.goo.ne.jp/qa3016163.html
(タブ区切りデータからダブルコーテーションを外したい)
を使用してみました。

〔使用前〕
"1","00030123","00000000000000000000","00000000000000000019","4220120","42201","","1"
〔使用後〕
1,00030123,00000000000000000000,00000000000000000019,4220120,42101,",1"

使用後、ダブルクォーテーションで囲まれていない項目があると、
ダブルクォーテーションが残ってしまいます。

.Pattern ="""([^""]+)"""
の部分を変更すれば、良いと思うのですが教えていただけないでしょうか?

Aベストアンサー

こんにちは。

>.Pattern ="""([^""]+)"""
このパターンは、必ず、""のない文字に挟まれているという条件だからです。
空で、"" というものは予想していませんでした。

>"42201","","1"  ←"" が該当から外れますね。

今、試していまんせが、

.Pattern ="""([^""]*)"""

プラス(+)をアスタリスク(*)に変えてみてくれませんか?

それでダメだったら、実際にコードに入れて試してみます。

QDOSコマンドのダブルクォーテーションの扱い

DOSコマンドでダブルクォーテーションを検索し、
リダイレクションをすることが出来なくて困っています。
例えば
findstr "\"!" a.txt
は出来ますが
findstr "\"!" a.txt >b.txt
とするとリダイレクションが出来ません。
grepも同じようです。

またunixコマンドではシングルクオートは、「囲まれた中身をそのままの文字として利用」し、ダブルクオートは、「囲まれた中身に$HOME など $ で始まる文字列があれば、
それを環境変数、シェル変数といった、値に置き換えてから、利用する」という明確な違いがありますが、DOSコマンドでは明確な違いはあるのでしょうか?

unixのshellをDOSコマンドに移植しています。
DOSコマンドの参考Webもあまり見つからなくて困っています。
もし参考になりそうなWeb等ありましたら教えてください。

Aベストアンサー

"と'の違いですが、cmd.exe では ' 特殊文字ではありません。for /f 文のある形式で意味を持つだけでそれ以外の場所では#+-/などと同じ普通の文字です。unixのシェルとは全然違います。

まず質問文の
>findstr "\"!" a.txt >b.txt
ですが、\ はfindstrが正規表現の特殊文字として扱うだけでCMDの構文解析では普通文字なので、"\"が引用符に囲まれた文字列として扱われます。次の!は引用符の外の文字。次の " a.txt >b.txtが、(終りの引用符の欠けた)引用符に囲まれた文字列とみなされますので、リダイレクト記号は引用符の中となり効きません。

>OKだったもの
>findstr ^"\^"!^" a.txt
>findstr \^"! a.txt
^を前置した"は引用符としての意味を失い、そのまま"がfindstrにわたされます。リダイレクト記号をつけても引用符の中で無いので効きます。findstrは検索文字列が"で囲まれていればそれを外して、囲まれていなければそのままが使われますので、どちらでも同じ結果になります。

>以下待ちになるもの
>findstr ^"! a.txt
findstrに "! a.txt が渡るのでa.txtも検索文字列の一部とみなされます(閉じる"がfindstrによって補われる)。従って、標準入力から、! または a.txt という文字列を含む行を探していることになります。
リダイレクトをつけると引用符の外なので効きます。

>findstr "^"!" a.txt
引用符の中で^は"をエスケープしないので1個目と2個目の"がペアになり^を囲み、3個目はペアの欠けた引用符となり a.txtを囲みます。リダイレクトをつけても引用符の中なので効かないはず。
その後、findstrが文字列を囲む""を外すので、^!つまり行頭の!または a.txtを含む文字を標準入力から探すことになります。

>findstr ^"!^"^" a.txt
^が前置されているので"はCMD的には引用符でなくなりますのでリダイレクトは効きます。
findstr には "!"" a.txt が渡り、文字列を囲む""が外されて、!またはa.txtを含む文字列を標準入力から探す。

>findstr ^" a.txt
同様。

>コンソールには表示できるがリダイレクションでエラーになるもの
>findstr \"! a.txt >b.txt
cmd的には"は引用符なので>b.txtも(終りの欠けた)引用符の中なのでリダイレクトは効きません。
findstr にわたるのは \"! a.txt >b.txtで、検索文字列が "! で残りがファイル名とみなされますが、「a.txt >b.txt」という名前のファイルが無いのでエラー
リダイレクトをつけないで
>findstr \"! a.txt
だと、findstr には \"! a.txt が渡り、検索文字列が "! で、ファイル名がa.txtとなり目的通りになります。

>「"」を検索するには「\^」をつけるということでしょうか。
CMDに引用符とみなされないように^をつけて(この^はCMDが外してからfindstrに渡す)、findstrが"を外さないようにさらに\を前置する必要があるということです。

CMDがまず最初に^や"や>をどのように処理して、次にfindstrが渡された文字列をどう解釈するか段階を分けて考えればわかると思います。これはunixのシェルでも同じですが。
unixのシェルと比べるとCMDの"は変態的です。

"と'の違いですが、cmd.exe では ' 特殊文字ではありません。for /f 文のある形式で意味を持つだけでそれ以外の場所では#+-/などと同じ普通の文字です。unixのシェルとは全然違います。

まず質問文の
>findstr "\"!" a.txt >b.txt
ですが、\ はfindstrが正規表現の特殊文字として扱うだけでCMDの構文解析では普通文字なので、"\"が引用符に囲まれた文字列として扱われます。次の!は引用符の外の文字。次の " a.txt >b.txtが、(終りの引用符の欠けた)引用符に囲まれた文字列とみなされますので、リダイレクト...続きを読む

QCSVファイルをBULK INSERTでSQLserverに読み込むことは可能?

BULK INSERT というものを使って
SQLServer2000上のテーブルに読込みたいのですが可能でしょうか?

その場合どうやって記述すればよいのでしょうか?
終端文字とかいうのは何になるのでしょう?

Windows2000
RDOで接続です。

Aベストアンサー

””で区切られたファイルのインポートですが、BULK INSERTでは、”を含んでロードしてしまいます。ですので、BULK INSERT を使用する場合は”を削除してからロードしないと駄目です。

ところで、<www7.big.or.jp/~pinball/discus/sqls/index.html>でも質問をしているようですが、どのような環境で何がしたいのか状況がつかめません。

詳しく教えていただけませんか?

Qタブ区切りデータからダブルコーテーションを外したい

エクセルでタブ区切りのデータを開き編集・保存すると、データ
内にカンマが入ってる部分が" "で囲まれます。なんらかの設定
でこのダブルコーテーションをなくすことは可能でしょうか?

現在は保存後エディタで開いて、置換しております。

エクセルのシートをコピー→エディタに貼り付けて、エディタから
保存する方法も考えましたが、何か単純な設定でいけるのかな…?
と思い、質問した次第ですm(__)m

頻繁にする作業なので(1日10回以上)、何とか簡単な方法は
ないかと考えております。

Aベストアンサー

こんばんは。

>実は、ファイル名が「今開いているブックと同じ」で保存したいため

それは、自然のままにすれば、別のText ファイルになりますね。

>Open exPath & cnsFILENAME For Output As #FileNo

それ自体は、アペンドモードではありませんし、新しいテキストファイル生成になっていますけれど。それに、拡張子は、TXT か、TSV としますね。それと、いずれにしても、これを出力するマクロ自体は、どこかのExcel標準/アドインスタイルのブックにおいておかなくてはなりませんよね。

だから、元のファイル名を生かしたいのでしたら、

  Dim exPath As String
  Dim cnsFILENAME As String
  exPath = "保存先パス\" 'Application.DefaultFilePath & "\"
  cnsFILENAME = Mid$(ActiveWorkbook.Name, 1, InStrRev(ActiveWorkbook.Name, ".") - 1) & ".txt" 'ここで、拡張子抜きのベース名が取れます。
  
  ・
  ・
  ・

こんな感じにしてしまえば、Excelブックとは、分離してしまうと思います。
つまり、

 Close #FileNo '←ここで、開放されますね。


>これも定番の表記で慣れていきたいです。
この話は、説明するとややこしくなるのですが、今は、.Net の影響もあるのだろうと思いますが、私の知っている限りでは、昔のVBのハンガリアン表記法などとは、暗黙のルール自体が、変わってきているようなのですね。(そんなことは覚える必要はないのですけれど)早い話、自由は自由でよいのです。

ただ、私のVBEの2バイト文字検索が調子が悪いことと、デベロッパーツールを使わない代わりに、ドイツのVBAアドインツール(Mz-Tools=フリー)を使うこともあって、2バイト文字表記がツールではまったく利かないという理由もあるのです。このツールは、おもに、VBAのテンプレートとグローバルプロジェクトの検索するために使っています。

こんばんは。

>実は、ファイル名が「今開いているブックと同じ」で保存したいため

それは、自然のままにすれば、別のText ファイルになりますね。

>Open exPath & cnsFILENAME For Output As #FileNo

それ自体は、アペンドモードではありませんし、新しいテキストファイル生成になっていますけれど。それに、拡張子は、TXT か、TSV としますね。それと、いずれにしても、これを出力するマクロ自体は、どこかのExcel標準/アドインスタイルのブックにおいておかなくてはなりませんよね。

だから、元...続きを読む

QCSV形式のファイルを読み込んでテーブルに格納するには?

VB6でCSV形式のファイルを読み込んで
それをデータベースに書き込みたいのですがどうやれば
いいか分かりません・・・。

1レコードが1行に書かれている固定長のレコードなら
1行ずつ読み込んでそれをループさせてEOFになるまで
という風に読みこんでいたのですが、
CSVの場合はどのようにすればよいのでしょうか?
基本的には同じような考えのような気がするのですが。

プログラミング初心者ですみません。
どなたか分かりやすいサンプルなど教えてもらえませんでしょうか?

Aベストアンサー

100万件のデータをCSVで読み込むなんて、大変ですね・・・

私が伝えた方法でやるとしたら、

バイナリで開く
GETで取得
REPLACE関数でダブルコーテを変換(っていうかダブルコーテを削除してしまう)
バイナリで開く
PUTでファイルに出力

という方法で置き換えができますが。。。

しかし大きいファイルを一度に行うとパフォーマンスが下がる気がします。
ですので、何分割かで読み込む必要があるかもしれません。
要は重要なのは件数ではなく、カラム数やファイルサイズの方です。

それではがんばってください。

Q文字列に含まれているダブルクォーテーション( ")を置換する

文字列に含まれているダブルクォーテーションを除きたいのですが、これをSubstitute関数で置換しようとしてもうまくいきません。ダブルクォーテーションが文字列を指定するために使われるせいだと思うのですが、"を文字列として指定する方法はあるのでしょうか?
よろしくお願いします。

Aベストアンサー

=SUBSTITUTE(A1,CHAR(34),"a")

のように、CHAR(34)で表せば大丈夫だと思います。

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
のように、フルパスで指定しておいた方が確実かと…

Qcsvデータ ダブルクォーテーションを追加したいんです

csvデータに項目囲み文字がダブルクォーテーションを追加したいのですがどなたかやり方教えて下さい。宜しくお願いします。

Aベストアンサー

この変換はエディタでやりました。
正規表現ができる秀丸のようなエディタなら簡単に
できますよ。

置換前   置換後

 ,  →  ","

 \n →  "\n"

と2回変換をかければ一発でした。

秀丸はこの変換速度が他のエディタに比べて高速
ですので(ワードパッドやメモ帳の数百倍の早さ)
お勧めです。

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた


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

人気Q&Aランキング