I have below a list of text, it is from a popular online game called EVE Online and this basically gets mailed to you when you kill a person in-game. I’m building a tool to parse these using PHP to extract all relevant information. I will need all pieces of information shown and i’m writting classes to nicely break it into relevant encapsulated data.
2008.06.19 20:53:00 Victim: Massi Corp: Cygnus Alpha Syndicate Alliance: NONE Faction: NONE Destroyed: Raven System: Jan Security: 0.4 Damage Taken: 48436 Involved parties: Name: Kale Kold Security: -10.0 Corp: Vicious Little Killers Alliance: NONE Faction: NONE Ship: Drake Weapon: Hobgoblin II Damage Done: 22093 Name: Harulth (laid the final blow) Security: -10.0 Corp: Vicious Little Killers Alliance: NONE Faction: NONE Ship: Drake Weapon: Caldari Navy Scourge Heavy Missile Damage Done: 16687 Name: Gistatis Tribuni / Angel Cartel Damage Done: 9656 Destroyed items: Capacitor Power Relay II, Qty: 2 Paradise Cruise Missile, Qty: 23 Cataclysm Cruise Missile, Qty: 12 Small Tractor Beam I Alloyed Tritanium Bar, Qty: 2 (Cargo) Paradise Cruise Missile, Qty: 1874 (Cargo) Contaminated Nanite Compound (Cargo) Capacitor Control Circuit I, Qty: 3 Ballistic Deflection Field I 'Malkuth' Cruise Launcher I, Qty: 3 Angel Electrum Tag, Qty: 2 (Cargo) Dropped items: Ballistic Control System I Shield Boost Amplifier I, Qty: 2 Charred Micro Circuit, Qty: 4 (Cargo) Capacitor Power Relay II, Qty: 2 Paradise Cruise Missile, Qty: 10 Cataclysm Cruise Missile, Qty: 21 X-Large Shield Booster II Cataclysm Cruise Missile, Qty: 3220 (Cargo) Fried Interface Circuit (Cargo) F-S15 Braced Deflection Shield Matrix, Qty: 2 Salvager I 'Arbalest' Cruise Launcher I 'Malkuth' Cruise Launcher I, Qty: 2
I’m thinking about using regular expressions to parse the data but how would you approach this? Would you collapse the mail into a one line string or parse each line from an array? The trouble is there are a few anomalies to account for.
First, the ‘Involved parties:’ section is dynamic and can contain lots of people all with the similar structure as below but if a computer controlled enemy takes a shot at the victim too, it gets shortened to only the ‘Name’ and ‘Damage Done’ fields, as shown above (Gistatis Tribuni / Angel Cartel).
Second, the ‘Destroyed’ and ‘Dropped’ items are dynamic and will be different lengths on each mail and i will also need to get the quantity and wether or not they are in cargo.
Ideas for an approach are welcome.
If you want something flexible, use the state machine approach.
If you want something quick and dirty, use regexp.
For the first solution, you can use libraries that are specialized in parsin since it’s not a trivial task. But because it’s fairly simple format, you can hack a naive parser, as for example :
We can do that because here, reliability and perf are not an issue 🙂
Happy game !