windows上的文件偏移量

windows上的文件偏移量,windows,ms-access,scripting,file,offset,Windows,Ms Access,Scripting,File,Offset,是否有一种简单的方法,最好是使用脚本语言或可以通过批处理文件调用的小工具,来操作文本文件、标记偏移量并将偏移量之后的所有内容放入新文件 我有一个文本文件添加到nightly,我想让它标记文件的结尾,然后在添加新数据后,只处理偏移量和结尾之间的数据。我不能只使用字符串或分隔符,因为它是blob数据 编辑:文本文件是通过从计划任务运行ms access宏创建的,该宏将数据导出为csv文件。在考虑Patricks的建议时,我想知道是否可以在文件名中添加一个通配符,例如日期,以便始终具有不同的文件。然后

是否有一种简单的方法,最好是使用脚本语言或可以通过批处理文件调用的小工具,来操作文本文件、标记偏移量并将偏移量之后的所有内容放入新文件

我有一个文本文件添加到nightly,我想让它标记文件的结尾,然后在添加新数据后,只处理偏移量和结尾之间的数据。我不能只使用字符串或分隔符,因为它是blob数据


编辑:文本文件是通过从计划任务运行ms access宏创建的,该宏将数据导出为csv文件。在考虑Patricks的建议时,我想知道是否可以在文件名中添加一个通配符,例如日期,以便始终具有不同的文件。然后,该文件将被scp发送到linux服务器,并在那里加载到mysql数据库中。

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])

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])
我可以从类Unix系统中想到tail、bash和其他实用程序。你可以通过最少的安装在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
我可以从类Unix系统中想到tail、bash和其他实用程序。你可以通过最少的安装在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

假设您当前正在使用脚本从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


假设您当前正在使用脚本从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


你能给文件中的记录加上时间戳吗?您是否可以在您的问题中提供一个简短的示例,说明您正在处理什么?它是access数据库的导出数据,包括一些二进制数据。没有日期字段,我无法修改access数据库使其具有日期字段。我建议编辑您的问题以描述您的流程,并使用ms access标记access数据库;您将获得更好的可视性和可能更多的答案。您能为文件中的记录添加时间戳吗?您是否可以在您的问题中提供一个简短的示例,说明您正在处理什么?它是access数据库的导出数据,包括一些二进制数据。没有日期字段,我无法修改access数据库使其具有日期字段。我建议编辑您的问题以描述您的流程,并使用ms access标记access数据库;您将获得更好的可视性和可能更多的答案。谢谢您的回答,但python不适用于此实例。谢谢您的回答,但python不适用于此实例。我正在access中使用一个从命令行运行的宏,使用宏是否容易?您的问题是“有没有一种简单的方法,最好是使用脚本语言或可以通过批处理文件调用的小工具“……我不得不问;为什么不把标记后面的数据放进自己的文件中呢?这似乎是显而易见的。我想,因为每个晚上都必须自动运行..,我可以在linux中设置,但access可以有一个通配符或变量,例如文件名中的日期?不是从宏,而是从VBA。如果您已经有一个.BAT文件从命令调用Access宏,那么我的解决方案应该适合您。我正在Access中使用一个从命令行运行的宏,使用宏是否容易?您的问题是“有没有一种简单的方法,最好是使用脚本语言或可以通过批处理文件调用的小工具“……我不得不问;为什么不把标记后面的数据放进自己的文件中呢?这似乎是显而易见的。我想,因为每个晚上都必须自动运行..,我可以在linux中设置,但access可以有一个通配符或变量,例如文件名中的日期?不是从宏,而是从VBA。如果您已经有一个.BAT文件从命令调用Access宏,那么我的解决方案应该适合您。