← All academy guides
Foundation

How to Read a P6 XER File — It's Just Text

An XER file is P6's plain-text export format. Despite the intimidating structure, it's tab-delimited text you can open in Notepad — no special tools required. Click any line below to see what it means.

Click a line to explain it
%T TASK %F task_code task_name act_start_date act_end_date clndr_id total_float_hr_cnt %R A100 Site Establishment 2026-01-05 08:00 2026-01-09 16:00 CAL01 0 %R A110 Excavation 2026-01-12 08:00 2026-01-20 16:00 CAL01 320 %T TASKPRED %F task_pred_id pred_task_id task_id pred_type %R 10001 A100 A110 PR_FS
Click any highlighted line above to see what it declares.

The %T / %F / %R structure

Every table in an XER follows the same three-line-type pattern: a %T line names the table, a %F line lists the field names for every row that follows, and each %R line is one record, with values in the same order as the %F line above it. Tab characters separate every field — not spaces, not commas.

Windows-1252 encoding

XER files are encoded in Windows-1252, not UTF-8. If an activity name or resource description contains an extended character (curly quotes, accented letters, the degree symbol), opening or parsing the file as UTF-8 will corrupt those characters. Any parser reading XER files needs to decode as Windows-1252 first.

Key tables

How TASKPRED links activities

Each TASKPRED row names a predecessor task, a successor task, and a relationship type. A CPM engine builds its entire network graph from these rows alone — without them, TASK rows are just an unordered list of activities with no logic between them.

PR_FS
Finish-to-Start: successor starts after predecessor finishes.
PR_SS
Start-to-Start: successor starts once predecessor starts.
PR_FF
Finish-to-Finish: successor finishes once predecessor finishes.
PR_SF
Start-to-Finish: predecessor starts before successor can finish (rare).

Why the file has no schedule results baked in

A freshly exported XER carries the dates and float from whenever it was last scheduled inside P6 — but nothing forces those numbers to be current. If someone edited logic, durations or calendars after the last F9 (Schedule) run, the stored dates in TASK are stale until it's rescheduled. A tool reading the file directly can trust the stored dates only as much as it trusts that the file was scheduled immediately before export — which is exactly why an independent CPM recompute, run straight from TASK and TASKPRED, is worth having as a cross-check.

Reading the raw structure once makes every downstream tool — P6 itself, or an independent recompute — much easier to trust, because you can always go back to the source rows and see exactly what they say.

Upload your XER → floatcheck.html