CSVファイルの特定行を削除するということは可能なのでしょうか?
可能であれば教えて頂けないでしょうか?
お願いします。

A 回答 (6件)

書き換えるというよりは、


その行を除いて別のファイルへコピーするという方法が一般的ですね。

例:AをCSVファイルだとすると、
1.Bという空のファイルを生成する。
2.Aから1行ずつ読みBへ1行ずつコピーする。
 ⇒削除したい行はコピーしない。
3.Aの最後行まで達したらAを削除し、BをAにリネームする。

こんな感じです。

この回答への補足

ありがとうございます。
その方法は考えていたんですが・・・。

ほかのやり方って無いんですかね?

補足日時:2001/11/26 15:35
    • good
    • 0

テキストのままで、カンマ区切りなら無理です。



一度DBに取り込んで削除して吐き出すことならできますが・・・


固定長なら
ファイルを変数に読む(InputではなくGETでよむ)
特定行を探す
固定長だから1行のバッファ領域が決まっているので、その分を抜いてメモリコピーする
ファイルに落とす。

・・・それ以外の方法は#1さんの方法しか・・・
    • good
    • 0

CSVファイルはシーケンシャル・ファイルです。

内容+CR+LF(CR+LFがないものも多い)が順次続いています。だから削除したいところをブランク+CR+LFにしても、内容がブランクになっただけでその後のレコードが前につめられるわけでは有りません。
昔から大型コンピュターで磁気テープを使ってシステムが作られていたときにも、たった1レコードを削除や追加するときも、新しいアウトプットテープを掛けて、インプットテープを全レコード読んで削除するレコードをとばしてそれ以外をアウトプットテープに書いたことを思いだしました。
ただシステム全体で、第一フィールドを「死にサイン」に設定し、削除したいとき、「死にサイン」フィールドに(例えば)「1」を書きこみます。
そしてそのファイルを使うあらゆるプログラムで「死にサイン」が1なら読み飛ばす約束にする。但し他人にそのファイルを渡す時はその申し会わせは有効でない。
こう言う不便さから、思う場所に追加出きるためにファイル構造が順ファイル以外に考えられています。
    • good
    • 1

エディターで一行抹消は駄目ですか?

    • good
    • 0

リッチテキストボックスあるいはGrid系コントロールを


使えば出来るであろう。
しかし、No.1の方法がベストだと思いますが..
    • good
    • 2

残念ながら無さげです…。

    • good
    • 0

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

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

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

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

QVBScriptにて、csvファイルから特定のレコードを取得したい

以下のcsvファイルから例えば、「name」列が「aaa」の行を取得するVBScriptを作成したのですが、うまくいきません。ご教授お願いいたします。
---------------
name,id
aaa,1
bbb,2
ccc,3
---------------

作成したVBScriptは以下のものになります。
(SQL文のWhere句に直接、「where name= 'aaa'」と打つとうまくいきますが、変数を指定したいです。)
-------------------------------------------
Option Explicit

Dim objADO
Dim objRS
Dim strName

strName = "aaa"

'ADOオブジェクトを作成
Set objADO = CreateObject("ADODB.Connection")

'ADOを使いCSVファイルを扱う準備(オープン)を行う
objADO.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=C:\sagyou\;" & _
"ReadOnly=1"

'SQLを実行し、当該タスクのデータを抽出します
Set objRS = objADO.Execute("select * from test.csv where name= strName")

'レコードセットをクローズobjRS.Close
objRS.Close

'ADOオブジェクトをクローズ
objADO.Close

以下のcsvファイルから例えば、「name」列が「aaa」の行を取得するVBScriptを作成したのですが、うまくいきません。ご教授お願いいたします。
---------------
name,id
aaa,1
bbb,2
ccc,3
---------------

作成したVBScriptは以下のものになります。
(SQL文のWhere句に直接、「where name= 'aaa'」と打つとうまくいきますが、変数を指定したいです。)
-------------------------------------------
Option Explicit

Dim objADO
Dim objRS
Dim strName

strName = "aaa"

'ADOオブジェクトを...続きを読む

Aベストアンサー

VBA みたいに "" を使うとダメみたいですね。失礼しました。
Set objRS = objADO.Execute("select * from test.csv where name='" & strName & "'")
としてみてください。

QVBS or BATでCSVファイルに入っている特定の行、列の文字列を表示したい

タイトルの件、VBS or BAT でCSVに入っている特定の行と、特定の列を表示したいです。
プログラムに疎く実現できるかわかりませんが

具体的書きますと、

例えば下記のようなCSVファイルがあるとします。

IDPASS.csv

PC_A,ID_1,PASS_1
PC_B,ID_2,PASS_2
PC_C,ID_3,PASS_3


このCSVの中身を vbs or batを使って読み出したいです。


ロジック的には
1.vbsをキックしたコンピューター名を取得
2.該当のcsvの1列目をなめて、取得したコンピューター名と一致する名称が見つかったら、その行の2列目と3列目を表示。
※あなたのIDは"2列目"パスワードは"3列目"です。
3.見つからなかったら"見つかりませんでした。"と表示 のようなイメージです。

大変恐縮ですが、お知恵をお貸しいただければと思います。

Aベストアンサー

こんな感じで、どうでしょうか。

Const FILENAME="C:\Temp\IDPASS.txt"
Set WshNetwork = WScript.CreateObject("WScript.Network")
computerName =WshNetwork.ComputerName
Set objFso = CreateObject("Scripting.FileSystemObject")
If objFso.fileExists(FILENAME) Then
Set objTxIn = objFso.OpenTextFile(FILENAME,1)
i=0
Do Until objTxIn.AtEndOfStream = True
buf =objTxin.ReadLine()
i =InStr(1,buf,computerName,1)
If i>0 Then Exit Do
Loop
If i>0 Then
ar = Split(buf,",")
MsgBox "your PC:'" & computerName & "'" & vbcrlf & _
"ID:" & ar(1) &" PASS:" & ar(2)
Else
MsgBox "見つかりませんでした。",48 'vbExclamation
End If
WScript.Quit
Else
MsgBox "ファイルが見つかりません。",16 'vbCritical
End If

こんな感じで、どうでしょうか。

Const FILENAME="C:\Temp\IDPASS.txt"
Set WshNetwork = WScript.CreateObject("WScript.Network")
computerName =WshNetwork.ComputerName
Set objFso = CreateObject("Scripting.FileSystemObject")
If objFso.fileExists(FILENAME) Then
Set objTxIn = objFso.OpenTextFile(FILENAME,1)
i=0
Do Until objTxIn.AtEndOfStream = True
buf =objTxin.ReadLine()
i =InStr(1,buf,computerName,1)
If i>0 Then Exit Do
Loop
If i>0 Then
ar = Split(buf,",")
Ms...続きを読む

Qデスクトップ上のCSVファイルの削除について

いつもお世話になっております。
VBAでまた難問に詰まってしまいました。ご教授お願い致します。

別のフォルダに保存されているマクロを利用して、とあるデータを作成するのですが
途中でデスクトップ上に一回保存をしたCSVファイルを最後に削除する
という動きをさせたいです。

下記のマクロだと、マクロとCSVファイルがデスクトップ上にあれば削除出来るのですが
マクロは常にとあるフォルダに保管されており、使用する人間はバラバラです。
※CSVファイルの他に3種類程データを作成するのですが
 マクロを使った人が使っているPCのデスクトップ上に保管する事になっております。
 上記の事から、Killステートメントでファイル指定が出来ない状態(不特定のデスクトップ)です。
 
Sub test()

Dim myPath As String
Dim i As String
myPath = ThisWorkbook.Path & "\"
i = "テストデータ.csv"
If InStr(i, ".csv") = 0 Then i = i & ".csv"
If Dir(myPath & i) <> "" Then
Kill myPath & i
Else
End If

End Sub

不特定のデスクトップ上にあるcsvファイルを削除する事は可能でしょうか?
以上、宜しくお願い致します。

環境 WindowsXP Excel2003

いつもお世話になっております。
VBAでまた難問に詰まってしまいました。ご教授お願い致します。

別のフォルダに保存されているマクロを利用して、とあるデータを作成するのですが
途中でデスクトップ上に一回保存をしたCSVファイルを最後に削除する
という動きをさせたいです。

下記のマクロだと、マクロとCSVファイルがデスクトップ上にあれば削除出来るのですが
マクロは常にとあるフォルダに保管されており、使用する人間はバラバラです。
※CSVファイルの他に3種類程データを作成するのですが
 マクロを...続きを読む

Aベストアンサー

http://www.moug.net/tech/exvba/0060052.html

myPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop") & "\"

かな?

Qデータベースの特定のfieldだけ削除は可能ですか?

今VB6でSQLにて特定のaccessのレコードを抽出して数あるfieldの中の値を変更し、更新しています。
同様に数あるfieldの中の値を削除(空)にすることは可能でしょうか?

Aベストアンサー

未検証ですが、
・・・・
Con.Open
strSQL = "UPDATE TableName SET TableName.FieldName = null;"
Con.Execute strSQL
Con.close

でできませんか?

Q特定の文字を含まないセルの行を削除するには

いつもお世話になっております。
特定の文字列(下記では"0610")を含まないセルの行を削除するプログラムを組むにはどのようにしたどのようにしたらよいのでしょうか。
以下のようなプログラムを組んでみました。

Sub test()
Dim i As Long
With Range("C1")
For i = .CurrentRegion.Rows.Count To 1 Step -1
If .Offset(i, 0) <> "0610*" Then .Offset(i,0).EntireRow.Delete
Next i
End With
End Sub

しかしこれでは先頭行を残し全ての行が削除されてしまいます。
IF文の"<>"がうまくないのだと思いますが、Like演算子の反対のようなものはありませんでしょうか。ご教授いただければ幸いです。
*ちなみに上のプログラムは'06年10月以外のデータは削除するために作ったものです。

Aベストアンサー

こんばんは。

含む等は、Like演算子が汎用性がありますが、
今回のような場合は、あっさりと頭4桁処理でもOKですよね。

If Left(.Offset(i, 0), 4) <> "0610" Then
.Offset(i, 0).EntireRow.Delete

それから一言。
提示のコードでは最後のセルの次のセルからチェックしているのはお分かりですよね?
それについては今回は問題はないですが、Offsetを使う時は特に気をつけないといけない点のひとつだと思います。
 


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

人気Q&Aランキング

おすすめ情報