窗口上的文件偏移量

问题描述:

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

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

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

+0

你可以在文件中记录时间吗?你能否在你的问题中提供一个简单的例子? – 2009-01-28 13:15:27

+0

它是一个访问数据库的导出数据,包括一些二进制数据。有没有日期字段,我不能修改访问数据库有一个 – 2009-01-28 13:49:13

+0

我建议编辑您的问题来描述您的过程,并访问数据库,并标记与MS访问;你会得到更好的可见性和可能更多的答案。 – 2009-01-28 15:40:08

假设您目前正在使用脚本已经出口从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

它与蟒简单:

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

能想到的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