从超过n秒的文件中删除文本

时间:2017-03-24 10:19:07

标签: c#-4.0 text

更新以包含更多信息,并且我已经尝试在批处理脚本中尝试执行此操作,而不是尝试使用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秒之前跳过所有行吗?

或者还有另一种我没想过的方法吗?

感谢任何帮助。

1 个答案:

答案 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。我怀疑这段代码是否正常工作,我只想举一个例子。