テキストファイルを頭から1割だけ抽出する方法又はフリーソフトがありましたら、教えて下さい。
(例)100MBのデータを、頭から10MBにして、あとは削除する。
現在は手作業でやっています。
テキストデータが多い時は時間がかかるので大変です。
バッチファイルで簡単に出来るものでしょうか?(当方、知識がありません)
判る方、よろしくお願いいたします。
どうも答えにくいのですね。
”バッチファイルで”は何を期待してるのか、よく期待レベルがわからない。
運用方法とか漠然としていて掴みにくいし。
ExcelのVBAを使えば出来ないことないけど、運用条件がどうかだな。
やることは簡単でも運用方法によってはそのための備えが増えてくる。
・処理対象のファイルの選択条件とか。
・フォルダ内のすべてのファイルを対象とするのか
・フォルダ名、パス、ファイル名称は固定なのか、あるいはどう指定するのか。
・対象ファイルは自分で探すのか、一覧データが与えられるのか、とか、いろいろ。
・データには全角文字含むのか、すると文字数とバイト数では割り切れないこともある。
・それから、文字コードの問題は?(多分WindowsのShif-Jisと思うけど)
とにかくそれならもっとわかるようにしないと対応できない。
とにかくも考えてみると、ちょっと簡単なうまい方法は思い浮かばなかったので、とりあえず、なんとでもなるExcelのVBAで、考えてみた。
基本部分のSubプロシジャだけを下に示します。
運用に合わせて、この上位プロシジャを作り、うまく繋げればいいでしょう。
なお、容量の「10MB」も表記に曖昧性あり。
最近は”MiB”(メビバイト)なる表現も使われ始めた。
1MBは、
(1)1MB=1,000,000バイト=1,000KB(1KB=1000B)なのか、
(2)1MiB=1,048,576バイト=1,024KiB(1KiB=1024B)なのか。
とか、いろいろあるね。
本例では、後者の記法を使用している。
Sub ファイル文字数で切捨て更新()
Dim prmFol
Dim prmFil
Dim fileNo
Dim wkI, wkJ
Dim wkStr
Dim wkErr
Dim wkBuffer
prmFol = "c:\temp\" ' 対象のフォルダ
prmFil = "test.txt" '処理対象のファイル
fileNo = FreeFile()
wkStr = ""
wkErr = 99
Open prmFol & prmFil For Input As fileNo
For wkI = 1 To 10 ' 1MB(1MiB)の処理を10回繰り返す ⇒ 10MB(10MiB)になる
For wkJ = 1 To 1024 ' 1024B(1KB or 1KiB) を1024回繰り返すので、1MB(1MiB)
On Error Resume Next
wkBuffer = Input(1024, #fileNo) '1024バイトずつ読み出す
wkErr = Err
On Error GoTo 0
If wkErr <> 0 Then
Exit For '途中でエラー(10MB未満)は処理スキップ
End If
wkStr = wkStr & wkBuffer '読みだしたデータを溜め込む
DoEvents ' (念のためループ時にESCキーで割込み可能に)
Next wkJ
If wkErr <> 0 Then Exit For
Next wkI
' 念のため(ちょうど10MBなら更新不要と)
If wkErr = 0 Then
On Error Resume Next
wkBuffer = Input(3, #fileNo)
wkErr = Err
On Error GoTo 0
End If
Close #fileNo
'
If wkErr = 0 Then
fileNo = FreeFile()
Open prmFol & prmFil For Output As fileNo
Print #fileNo, wkStr '読み出した10MBのデータで書き戻す
Close #fileNo
End If
MsgBox "処理終了! 終了コード:" & wkErr & vbCrLf & " ファイル:" & wkFol & wkfil & vbCrLf & "ファイルサイズ=" & FileLen(prmFol & prmFil)
End Sub
きむむ様。
2019/03/15 16:02:16ご丁寧な回答をありがとうございました。
仰る通り、私の知識がない為、説明も的確にできずに申し訳ありません。
詳しく書いていただき感謝します。
いただいたご回答は難しくて判らないのですが、勉強してみます…