
No.4ベストアンサー
- 回答日時:
No.3です。
> 元のファイル内容の「改行」がなくなってしまうんです。
それは、改行だけの行も重複していれば
重複行とみなしてしまうように作ってあるからです。
だから最初の改行だけの行だけは残っていたはずですよ^^;
> あとはファイル名に拡張子が2つ付いてしまいました。
これは間違って元のファイルを台無しにしないよう、
念のため別のファイルに保存するようにしたからです。
改行だけの行はそのままなくならないようにして、
ファイルは上書きするように変更してみました。
今度のは元のファイルを上書きしてしまうので、
実行前には必ずバックアップを取っておいてくださいね。
'空行無視、ファイル上書き
'---ここから---
Option Explicit
On Error Resume Next
Dim iCounter
Dim oParam
Set oParam=WScript.Arguments
For iCounter=0 To oParam.Count-1
Call procDelDupFromFile(oParam(iCounter))
Next
Set oParam=Nothing
On Error GoTo 0
Sub procDelDupFromFile(sFileName)
Dim oFileSystem
Dim oFile
Dim sLines()
Dim iCounter
Set oFileSystem=WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number=0 Then
Set oFile=oFileSystem.OpenTextFile(sFileName)
If Err.Number=0 Then
iCounter=0
Do While oFile.AtEndOfStream<>True
ReDim Preserve sLines(iCounter+1)
sLines(iCounter)=oFile.ReadLine
iCounter=iCounter+1
Loop
oFile.Close
End If
End If
Call procWriteFile(sFileName,sLines)
Set oFileSystem=Nothing
Set oFile=Nothing
Set sLines=Nothing
End Sub
Sub procWriteFile(sFileName,sLines)
Dim sUniqFileName
Dim oUniqFileSystem
Dim oUniqFile
Dim bFilter
Dim iCounter
Set oUniqFileSystem=WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number=0 Then
Set oUniqFile=oUniqFileSystem.OpenTextFile(sFileName,2,True)
If Err.Number=0 Then
For iCounter=0 to UBound(sLines)-1
bFilter=procDupFilter(iCounter,sLines)
If bFilter Then
oUniqFile.Write(sLines(iCounter))
oUniqFile.Write(vbCrLf)
End If
Next
oUniqFile.Close
End If
End If
Set bFilter=Nothing
Set sUniqFileName=Nothing
Set oUniqFileSystem=Nothing
Set oUniqFile=Nothing
End Sub
Function procDupFilter(iIndex,sLines)
Dim sLine
Dim iCounter
sLine=sLines(iIndex)
procDupFilter=True
For iCounter=iIndex-1 to LBound(sLines) Step -1
If (StrComp(sLine,"")<>0) And (StrComp(sLine,sLines(iCounter))=0) Then
procDupFilter=False
Exit For
End If
Next
Set sLine=Nothing
End Function
'---ここまで---
nknk80さん、返信ありがとうございます!
> それは、改行だけの行も重複していれば
> 重複行とみなしてしまうように作ってあるからです。
> だから最初の改行だけの行だけは残っていたはずですよ^^;
なるほど、見えない改行も重複の対象になるんですね~
実行してみたら・・・キレイにできました~!^^
いやーずいぶんと作業が楽になりました。
プログラムって便利ですねぇ。
ありがとうございました~<(_ _)>
No.3
- 回答日時:
スクリプトの勉強をかねて作ってみました。
簡単な動作確認はしましたが、使う場合には確認してください。
下記内容をテキストファイル(拡張子は".vbs")で保存して重複行を削除したい
ファイルをドラッグ&ドロップすると重複行が削除されると思います。
何も工夫せずに作ったので、大きなファイルの処理には時間がかかります。
'---ここから切り取ってください---
Option Explicit
Dim oParam
Set oParam=WScript.Arguments
Dim iCounter
For iCounter=0 To oParam.Count-1
Call procReadFile(iCounter)
Next
Set oParam=Nothing
Sub procReadFile(iFileNum)
On Error Resume Next
Dim sFileName
Dim oFileSystem
Dim oFile
Dim sLines()
Dim iCounter
sFileName=oParam(iFileNum)
Set oFileSystem=WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number=0 Then
Set oFile=oFileSystem.OpenTextFile(sFileName)
If Err.Number=0 Then
iCounter=0
Do While oFile.AtEndOfStream<>True
ReDim Preserve sLines(iCounter+1)
sLines(iCounter)=oFile.ReadLine
iCounter=iCounter+1
Loop
oFile.Close
End If
End If
Call procWriteFile(sFileName,sLines)
Set sFileName=Nothing
Set oFileSystem=Nothing
Set oFile=Nothing
Set sLines=Nothing
End Sub
Sub procWriteFile(sFileName,sLines)
Dim sUniqFileName
Dim oUniqFileSystem
Dim oUniqFile
Dim bFilter
Dim iCounter
Set oUniqFileSystem=WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number=0 Then
Set oUniqFile=oUniqFileSystem.OpenTextFile(sFileName+".txt",2,True)
If Err.Number=0 Then
For iCounter=0 to UBound(sLines)-1
bFilter=procDupFilter(iCounter,sLines)
If bFilter Then
oUniqFile.Write(sLines(iCounter))
oUniqFile.Write(vbCrLf)
End If
Next
oUniqFile.Close
End If
End If
Set bFilter=Nothing
Set sUniqFileName=Nothing
Set oUniqFileSystem=Nothing
Set oUniqFile=Nothing
End Sub
Function procDupFilter(iIndex,sLines)
Dim sLine
Dim iCounter
sLine=sLines(iIndex)
procDupFilter=True
For iCounter=iIndex-1 to LBound(sLines) Step -1
If StrComp(sLine,sLines(iCounter))=0 Then
procDupFilter=False
Exit For
End If
Next
End Function
'---ここまで---
nknk80さん、ありがとうございます!
ちゃんと動いているみたいです。びっくりしました^^;
お心遣い、大変感謝致します<(_ _)>
ただいくつか問題が。。
確かに重複行は削除されたのですが
元のファイル内容の「改行」がなくなってしまうんです。
例)
ああああああです。
ええええ
いいいいです。
ううううううううです。
ええええ
おおおおおです。
↓↓↓ (スクリプト実行後)
ああああああです。
ええええ
いいいいです。 ←(元の改行がなくなって、全部くっついてしまう)
ううううううううです。
おおおおおです。
あとはファイル名に拡張子が2つ付いてしまいました。
例)
あああ.txt
いい.txt
ううううう.txt
↓↓↓ (スクリプト実行後)
あああ.txt.txt
いい.txt.txt
ううううう.txt.txt
大変恐縮なのですが
もし可能でしたら、修正していただけたら幸いです。
No.2
- 回答日時:
ツールやマクロなどで実現できるかもしれません。
事前にソートして重複行を隣接させないといけないとか、いろいろ制約があるものもあります。
http://www.forest.impress.co.jp/article/2008/05/ …
http://www.fpcu.jp/dosvcmd/bbs/log/findfindstrso …
http://detail.chiebukuro.yahoo.co.jp/qa/question …
http://park7.wakwak.com/~sawaboh/program/textedi …
textsorterは使ってみましたが、複数ファイルには対応していないようです。
プロンプトというのは分かりませんでした。
1フォルダ内(サブフォルダ含む)のテキストファイルを一括で重複行削除!
というようなマクロがあればいいんですが。。誰か作ってくれないかな^^;
お返事ありがとうございました。
No.1
- 回答日時:
誰も回答しないようなので・・・。
そのような特殊用途なツールは多分無いと思います。
行の順番を変更しても良いなら、UNIXコマンドでsortしてからuniqコマンドで削除できますが・・・。
このような作業は自分でC言語なりスクリプト言語(JAVA, perl, Ruby等)で専用プログラムを作るしかないと思います。
今後も同じような作業があるならば、スクリプト言語を覚えて損は無いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 教えて!goo 多数の重複質問・コピペ質問・類似質問を見かけるが運営に通報しても削除しないのはなぜでしょうか? 7 2023/05/07 09:44
- au(KDDI) Android Gmail で検索して消す方法 1 2022/11/10 16:10
- Mac OS Mac iPhoneの連絡帳の大量のリストを削除したい 1 2023/05/12 23:30
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- フリーソフト テキストファイルの一括置換で除外したい文字があります。 2 2022/06/21 17:53
- その他(プログラミング・Web制作) awkの BEGIN{RS=""} で空行を削除できるが、削除できる仕組みが分からない。 1 2023/05/02 14:14
- Excel(エクセル) エクセル マクロ テキストファイルを取り込む 複数の区切り文字で別々のセルに格納するには? 3 2022/08/10 21:10
- 労働相談 労働保険の年度更新 労働保険の年度更新の書類が本社に届きました。 複数の事業所があり、労働保険、雇用 2 2023/05/31 15:17
- Google Drive Googleドライブに詳しい方に質問です 3 2022/06/19 21:58
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VCFファイル内の同一ファイルを...
-
共有ファイルを誰かが勝手に操...
-
USB内のフィアルの復活ソフトは?
-
2台のpcを使っていてもう一台の...
-
EXCEL2016のファイルが突然、古...
-
ZOOM によるパソコン会議について
-
別CDからファイルをコピーしたC...
-
同じファイルを保存してもSSDと...
-
ACCESS、VBAでEXCELファイルを...
-
R-Groupのサポート受付窓口はど...
-
これってウイルスですか?
-
Norton AntiVirus が5時間もか...
-
フォルダーを保存する際に同じ...
-
HDDのファイルが勝手に壊れる?
-
ローカルのファイルとOne Drive...
-
コマンドプロンプト 閉じた時の...
-
Docuworks(ドキュワークス)の不...
-
内蔵HDDを認識させない方法...
-
Google Apps Scriptで自動印刷
-
VBA ファイルを開くダイアログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定ファイルの動作が重い
-
DVD shrinkでのISOファイル作成...
-
Excelの履歴を、過去1月に渡っ...
-
hardcopy.log って何ですか?
-
EXIF情報の削除をした後、プロ...
-
これってウイルスですか?
-
共有ファイルを誰かが勝手に操...
-
ACCESS、VBAでEXCELファイルを...
-
仮想isoイメージファイルの書き...
-
R-Groupのサポート受付窓口はど...
-
DVDshrinkによってC:\\の容量不足
-
同じファイルを保存してもSSDと...
-
シンガーソングライターでのp...
-
別CDからファイルをコピーしたC...
-
イラレ10 動作が急に遅く(不...
-
ローカルのファイルとOne Drive...
-
LanでつないだHDDの最適化を行...
-
<Excel>アドインから削除して...
-
CD Manipulatorで肝心のcueファ...
-
VCFファイル内の同一ファイルを...
おすすめ情報