アプリ版:「スタンプのみでお礼する」機能のリリースについて

100万行超のCSVがあります。
(ファイル形式はUTF-8、改行コードはLF)

1行目が項目名で、2行目以降がレコード、フッター行はありません。

各項目、データはダブルクォーテーションで囲まれたカンマ区切り形式です。

これを10万行ずつに区切りたいのですが一括でできる方法はないでしょうか。
各ファイル、項目名1行と10万レコードで100,001行で構成されます。

理想は、
ファイル名が、日付等の固定値+00001の連番です。
(例)2020031000001.csv

現在はテキストエディタ(秀丸)で、
1ファイル目:10万1行目以降を削除して保存
2ファイル目:10万行目までを削除し、10万1行目以降を削除して保存


こんな事を約10回繰り返していますが、途中で話しかけられたりして訳が分からなくなると、
やり直すハメに。。。

Excelで手作業でやらない理由は、CSV保存した際、ダブルクォーテーションが外れてしまう事と
文字コードをLFにし直さなければいけないからです。
正しく分割されてるなら、リネームや文字コード変換等を手作業で行う事になっても構いません。

Excelのマクロ、秀丸またはおすすめのテキストエディタのマクロ等でできる方法があったら教えてください。

A 回答 (5件)

#3です。

取り敢えずと言う事でしょうか。
ExcelVBAで処理するのは、どうでしょう?限界を感じますが、、

VBAからPowerShellを呼んでコマンドを送るなどにする場合、(コードはWebで)
直接やbatで操作した方が良いように思えますし、、

>保存後の改行コードがLFじゃなくなるので、これはテキストエディタで手修正です。
この部分は、CreateObject("ADODB.Stream") などで纏めて処理出来そうですが、、
(しっかりとした知識がある訳では無いです)いかがでしょう。

CSVの内容が分からず検証環境を作れないので、下記は参考になりますか? 

http://excel.syogyoumujou.com/vba/replace.html
    • good
    • 0

No.1 です。


splitに類するコマンド無いのか気になった検索してみたら、残念ながらWindowsにはなさそうですが、ただpowershell使うとできるっぽいですね。
↓こんな感じでしょうか。

$i=0; cat .\<ファイル名> -ReadCount 100000 | % { $_ > 2020031$i.csv;$i++ }
(参考:https://kbn48.com/technical/270

ただ、私がWindows使いじゃないので上手くいくかは未検証です。
それと、ファイル名の命名規則の箇所をどうすれば希望の型式になるのかはちょっと分かりません。

ということで、ご参考までに。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Powershellを使ったことがないので挑戦してみます。
今は近道のツールでしのぎたいと思いますが、
汎用性のある手法を整理しておきたいのでうまくいくか試してみます。

お礼日時:2020/03/11 13:58

意に反するかもしれませんが、だいぶ扱いに困っているようなので


すでにあるツールなどを使うのも有かなぁ。

http://www.pine4.net/Memo/Article/Archives/428
    • good
    • 1
この回答へのお礼

反しません。
解決が優先です。
リンク先バイナリをDLして試したら完璧じゃないですか!
ひとまず解決です、ありがとうございます。

ただし、改行コード指定がなく、保存後の改行コードがLFじゃなくなるので、これはテキストエディタで手修正です。
これは全然問題ありません。
VBAで実現出来たら一番理想なのですが。。。

お礼日時:2020/03/11 13:57

VBAには、次のステートメントが用意されているのですが、


ご存知ないですか?

・Line Input # ステートメント
・Print # ステートメント

簡単なサンプルを書いてみました。
出力ファイルを100件毎に切り替えるようにすれば、
お望みの処理ができると思います。

Sub sample()
Dim TextLine
Open "C:\xxxxxx\データX.csv" For Input As #1
Open "C:\xxxxxx\データY.csv" For Output As #2
Do While Not EOF(1)
Line Input #1, TextLine
Print #2, TextLine
Loop
Close #1, #2
End Sub
    • good
    • 0
この回答へのお礼

これで10万件出力できるんですか?後で実験してみます。
でも文字コード、改行コードは元のがそのまま引き継がれるんですかね?それも確認します。
ありがとうございました。

お礼日時:2020/03/11 13:54

WSLとかでLinuxコマンドが使えるのであれば、splitというツールでかんたんに出来ます。


↓こんな感じです。

$ split -l 100000 <ファイル名>
https://eng-entrance.com/linux-command-split
    • good
    • 0
この回答へのお礼

ありがとうございます。
手元のローカル環境がWindows10なので、もう少し敷居の低い手法だと助かります。
つまりそう簡単にはいかないって事なんですかねぇ。、、、

お礼日時:2020/03/10 19:01

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

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


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