是否有一种简单的方法,最好使用脚本语言或可通过批处理文件调用的小工具,对文本文件进行操作,标记偏移量,并将偏移后的所有内容放入新文件中?< / p>
我有一个文本文件添加到每晚,我想这样做,以便标记文件的结尾,然后添加新数据后,只处理偏移和结束之间的数据。我不能只使用字符串或分隔符,因为它是blob数据。
编辑:通过从计划任务运行ms访问宏来创建文本文件,计划任务将数据导出为csv文件。在考虑Patricks的建议时,我想知道是否可以在文件名中添加日期(如日期),以便始终拥有不同的文件。然后将该文件scp到linux服务器,然后将其加载到mysql数据库中。
答案 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