0

テキストファイルを操作し、オフセットをマークし、オフセットの後のすべてを新しいファイルに入れる、できればスクリプト言語またはバッチファイルを介して呼び出すことができる小さなツールを使用する簡単な方法はありますか?

nightlyにテキストファイルを追加したのですが、ファイルの末尾をマークして、新しいデータを追加した後、オフセットから末尾までのデータのみを処理するようにしたいと思います。ブロブデータであるため、文字列や区切り記号だけではこれを行うことができません。

編集: テキスト ファイルは、データを csv ファイルとしてエクスポートする、スケジュールされたタスクから ms アクセス マクロを実行することによって作成されます。パトリックの提案を考慮して、ファイル名に日付などのワイルドカードを追加して、常に別のファイルを作成できるかどうかを知りたいです。このファイルは Linux サーバーに scp され、そこで mysql データベースにロードされます。

4

3 に答える 3

2

それはpythonで簡単です:

import sys

def divide_file(fname, mark):
    mark_found = 0
    f = file(fname, 'r')
    for line in f.readlines():
        if mark in line:
            mark_found = 1
        if mark_found:
            print line.rstrip()
    f.close()

divide_file(sys.argv[1], sys.argv[2])

使用法と出力例:

c:\tmp>divide_file.py divide_file.py close
        f.close()

divide_file(sys.argv[1], sys.argv[2])
于 2009-01-28T13:19:22.237 に答える
1

現在、スクリプトを使用して Access データベースからデータをエクスポートしているとします。

@echo OFF

:: Force a new line and add a marker; assuming your file is data.txt.
@echo. >> data.txt
@echo **MARKER** >> data.txt

:: Run your export here: these lines just simulate the export.
@echo Test Line 1 >> data.txt
@echo Test Line 2 >> data.txt

:: Find line number of last marker:
for /f "usebackq delims=:" %%I in (`findstr /N "**MARKER**" data.txt`) do (
    set LAST_MARKER=%%I
)

:: Get all the lines after the last marker
for /f "skip=%LAST_MARKER% tokens=*" %%L in (data.txt) do (
    @echo %%L >> new_data.txt
)

出力は次のようにnew_data.txtなります。

テスト ライン 1
テスト ライン 2

于 2009-01-28T16:05:26.350 に答える
1

UNIX ライクなシステムのtailbash 、およびその他のユーティリティを考えることができました。MSYSを最小限にインストールすることで、Windows でそれらを取得できます。これらのユーティリティを参照するドキュメントと例は、非常に簡単に見つけることができます。また、bashは Windows バッチ ファイルよりもはるかに強力です。スクリプトは次のようになります。

#!/bin/bash

PREV_SIZE=`du -b text_file`
write_something_to_file text_file
CURR_SIZE=`du -b text_file`
let NUM=$PREV_SIZE-$CURR_SIZE
tail -c $NUM > new_text_file
于 2009-01-28T13:34:19.820 に答える