Vietname Data Base (VNDBA)
The Vietname Data Base (VNDBA) was part of the Operation Analysis System (OPSANAL).
The data base contains information on ground combat operations during the Vietnam War. Locations seem to be encoded using Universal Transverse Mercator coordinate system (UTM).
Reading the NIPS files
Based on a comment from NARA/CER Correspondence:
We are also aware that the VNDBA NIPS files may be challenging. We are aware some of the files may contain inconsistencies or dirty data that might cause the program to output incomplete sets of data. For example, the 1964 NIPS appears to have long strings of space characters embedded in some records, which cause NIPSTRAN to stop processing the file and output an incomplete set of records. Unfortunately, we have not had the resources to explore the issues further in detail.
RG330.VNDBA.N64
PyNIPS can read 336 records from the file:
Record Type | Count |
---|---|
B | 1 |
C | 1 |
F | 105 |
Q | 1 |
R | 228 |
------------ | -------- |
TOTAL | 336 |
We can not reproduce the issue described by NARA that NIPSTRAN stops processing (using NIPSTRAN Version 3.5.2).
RG330.VNDBA.N65
PyNIPS can read 338 records from the file:
Record Type | Count |
---|---|
B | 1 |
C | 1 |
F | 105 |
Q | 1 |
R | 230 |
------------ | -------- |
TOTAL | 338 |
RG330.VNDBA.NIP66
PyNIPS can read 127432 records:
Record Type | Count |
---|---|
B | 1 |
C | 1 |
F | 105 |
Q | 1 |
R | 127324 |
------------ | -------- |
TOTAL | 127432 |
RG330.VNDBA.NIP67
PyNIPS can read 144008 records:
Record Type | Count |
---|---|
B | 1 |
C | 1 |
F | 105 |
Q | 1 |
R | 143900 |
------------ | -------- |
TOTAL | 144008 |
RG330.VNDB.NIPA68, RG330.VNDB.NIPB68, RG330.VNDB.NIPC68
PyNIPS can read 86589 records from RG330.VNDB.NIPA68
:
Record Type | Count |
---|---|
B | 1 |
C | 1 |
F | 105 |
Q | 1 |
R | 86481 |
------------ | -------- |
TOTAL | 86589 |
However, none can be read from RG330.VNDB.NIPB68
or RG330.VNDB.NIPB68
directly by invoking the nipsext info
command. It seems like the the two files do not contain a File Format Table (FFT) (determined by inspecting logical records with the nipsext logical
command).
We can re-use the FFT from the initial file with following Python script:
import nips.logical_record
from nips.fft import DataFileControlRecord, FileFormatTable
from nips.data_file_record import DataFileRecord
def main(nips_files):
fft = FileFormatTable()
record_count = 0
for nips_file_path in nips_files:
with open(nips_file_path, "rb") as file:
print(f"Opening file {nips_file_path}")
for logical_record in nips.logical_record.read(file):
record = fft.feed(logical_record)
record_count = record_count + 1
if isinstance(record, DataFileControlRecord):
print("Found DataFileControlRecord.")
print(f"Total record count: {record_count}")
main(
[
"RG330.VNDB.NIPA68",
"RG330.VNDB.NIPB68",
"RG330.VNDB.NIPC68",
]
)
With this we can read a total of 129847 records.