Windows上的文件偏移量

时间:2009-01-28 13:04:48

标签: windows ms-access scripting file offset

是否有一种简单的方法,最好使用脚本语言或可通过批处理文件调用的小工具,对文本文件进行操作,标记偏移量,并将偏移后的所有内容放入新文件中?< / p>

我有一个文本文件添加到每晚,我想这样做,以便标记文件的结尾,然后添加新数据后,只处理偏移和结束之间的数据。我不能只使用字符串或分隔符,因为它是blob数据。

编辑:通过从计划任务运行ms访问宏来创建文本文件,计划任务将数据导出为csv文件。在考虑Patricks的建议时,我想知道是否可以在文件名中添加日期(如日期),以便始终拥有不同的文件。然后将该文件scp到linux服务器,然后将其加载到mysql数据库中。

3 个答案:

答案 0 :(得分: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])

用法&amp;输出示例:

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

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

答案 1 :(得分:1)

我可以想到 tail bash 以及类Unix系统中的其他实用程序。您可以通过最低限度安装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

答案 2 :(得分: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