はじめまして。

テキストファイルを頭から1割だけ抽出する方法又はフリーソフトがありましたら、教えて下さい。
(例)100MBのデータを、頭から10MBにして、あとは削除する。

現在は手作業でやっています。
テキストデータが多い時は時間がかかるので大変です。

バッチファイルで簡単に出来るものでしょうか?(当方、知識がありません)
判る方、よろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 13歳以上
  • 登録:2019/03/10 12:12:47
  • 終了:2019/03/15 16:02:39

ベストアンサー

id:kimuram No.1

きむむ回答回数27ベストアンサー獲得回数112019/03/13 22:24:27

どうも答えにくいのですね。
”バッチファイルで”は何を期待してるのか、よく期待レベルがわからない。
運用方法とか漠然としていて掴みにくいし。

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

※MiB(1Mib=1,024KiB,1KiB=1,024B)の表記で10MBを表しています。
※書き戻した結果のファイルは2バイト多くなっている。(最後の改行(CR,LF)がある)

また、EXCELが嫌なら、これをVBSで構成することも可能とは思うけど。(運用とエラー処理とか考えると結構たいへんなものかも)
もっと何か考えてること示してくれれば、また考えてみるけど。
また、他の方からも反応出てくると思うけど。

はて、「頭から1割」とは理解しがたいが。
例では100MBのデータを10MBにするものとだが、なんでも1割に減ずるのか?
示したVBAは10MB以上を切り捨てることで考えたものだが、そうではなくて結果のサイズはいろいろでとにかく1割に減ずる?例えば10バイトのファイルなら1バイトだけのファイルにするとか?
実際の手作業ではどんなことをしてるのか?
うーん、読めない!!!(こういうの考えるのって、疲れる)つぶやき。
なんか、なんか、だけど、とにかく回答に投げてみます。
参考にでもなれば、と。

id:junemiyo1965

きむむ様。
ご丁寧な回答をありがとうございました。
仰る通り、私の知識がない為、説明も的確にできずに申し訳ありません。
詳しく書いていただき感謝します。
いただいたご回答は難しくて判らないのですが、勉強してみます…

2019/03/15 16:02:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません