更新以包含更多信息,并且我已经尝试在批处理脚本中尝试执行此操作,而不是尝试使用C#。
之前我曾问过类似的问题,但这个问题略有不同,我无法弄清楚如何用之前的答案来解决这个问题。
我有一个.txt文件(一个日志文件),其中包含程序创建的飞机lat lon数据。 然后我使用另一个程序(虚拟ATC雷达)读取拉特隆数据并将飞机定位在雷达屏幕上。
我需要雷达程序才能读取当前的lat lon和3秒后的雷达程序,因为这样可以实现真实的飞机位置更新(雷达扫描大约2-3秒)并且旧数据用于飞机在屏幕上尾巴。
雷达程序在生成日志文件后启动,并在日志文件的顶部开始读取。
如果更换日志文件或在任何时候删除正在读取的行,雷达将停止。
日志文件每秒更新一次,如下所示。
[22:37:03]
LAT:LON:Some text 1
[22:37:04]
Some:LAT:LON:text 2
Some text 3:LAT:LON
[22:37:05]
Some text 4
more:LAT:LON: text
[22:37:06]
Some more text etc etc
我正在寻找能够...的东西 现在找到时间-3秒。 在该时间戳之前删除任何内容。
除了日志文件增长这一事实之外,以下是我目前所拥有和运作良好的事情(因为我不知道要跳过多少行)。 如果我不跳过行,则日志文件的开头太旧,并且飞机不在雷达屏幕上显示的位置。 如果我跳过太多行,就永远无法读取任何数据。
var content = File.ReadAllText("output.txt");
File.AppendAllText("data.txt", content);
var data = File.ReadAllLines("data.txt").Skip(6);
File.WriteAllLines("data.txt", data);
我可以在时间戳-3秒之前跳过所有行吗?
或者还有另一种我没想过的方法吗?
感谢任何帮助。
答案 0 :(得分:0)
set /a targets=%time:~6,2%
set /a targetm=%time:~3,2%
if %targets% LSS 3 (
set /a targets=targets - 3 + 60
set /a targetm-=1
)
set /a flag=0
call > %myTemp%
for /f "delims=" %%a in (%data%) do (
if !flag! EQU 0 (
set line=%%a
if "!line:~0,1!"=="[" (
set lineM=!line:~4,2!
set lineS=!line:~7,2!
if !lineS! GEQ !targets! ( if !lineM! GEQ !targetm! (
set flag=1
))
)
) else (echo %%a >> %myTemp%)
)
沿着这些行,你得到当前时间减去三秒的东西,然后循环遍历数据文件,检查每次遇到时间戳以查看它是否适合账单,并在此之后写下所有内容。
如果没有关于日志文件和从data.txt读取的程序的更多信息,我担心这是我能做的最好的事情。
P.S。我怀疑这段代码是否正常工作,我只想举一个例子。