Files
tacview-splitter/tacview-splitter.py
T
2020-09-29 15:17:13 +02:00

67 lines
2.0 KiB
Python

#!/usr/bin/env ipython
with open('Tacview-20200419-200244-DCS-OPUF_MSN18.txt.acmi') as fd:
tacview_raw_lines = fd.readlines()
fb = open('tacview_blue.txt.acmi', 'w')
fr = open('tacview_red.txt.acmi', 'w')
fv = open('tacview_violet.txt.acmi', 'w')
for i, line in enumerate(tacview_raw_lines):
if not line[0] == '#': # header is everything before the first '#'
fb.write(line)
fr.write(line)
fv.write(line)
else:
break
tacview_raw_lines = tacview_raw_lines[i:] # remove the header, we don't need it anymore
blue_ids = []
red_ids = []
# violet = neutral faction, used for chaffs, flares, decoys and shrapnel
# we can't decide easily which faction they belong to
# we would need to find the blue or red object with the least distance
# to violet objects around their spawn time
violet_ids = []
undecided_ids = []
for line in tacview_raw_lines:
# the first time a unit appears it has the Color in its line.
# The first part of the line (before the first comma) is the unique ID of the unit.
if line[0] == '#': # check if line is a time stamp
id_ = 'both'
elif line[0] == '-': # negative id is used to indicate a destroyed unit
id_ = line[1:].strip()
else: # otherwise it is a standard unit line
id_, rest = line.split(',', 1)
if 'Color=Red' in line:
red_ids.append(id_)
elif 'Color=Blue' in line:
blue_ids.append(id_)
elif 'Color=Violet' in line:
violet_ids.append(id_)
elif 'Color=' in line:
undecided_ids.append(id_)
if id_ in blue_ids:
fb.write(line)
elif id_ in red_ids:
fr.write(line)
elif id_ in violet_ids:
fv.write(line)
else: # id_ == 'both', has timestamps
fb.write(line)
fr.write(line)
fv.write(line)
fb.close()
fr.close()
fv.close()
if len(undecided_ids) != 0:
print('There were units that are neither BLUEFOR, REDFOR nor NEUTRAL. Please investigate.')
print(undecided_ids)