Data Interchange Format

From Wikipedia, the free encyclopedia - View original article

Jump to: navigation, search

Data Interchange Format (.dif) is a text file format used to import/export single spreadsheets between spreadsheet programs ( Calc, Excel, Gnumeric, StarCalc, Lotus 1-2-3, FileMaker, dBase, Framework, Multiplan, etc.). It is also known as "Navy DIF". One limitation is that DIF format cannot handle multiple spreadsheets in a single workbook.


DIF was developed by Software Arts, Inc. (the developers of the VisiCalc program) in the early 1980s. The specification was included in many copies of VisiCalc, and published in Byte Magazine. Bob Frankston developed the format, with input from others, including Mitch Kapor, who helped so that it could work with his VisiPlot program. (Mitch later went on to found Lotus and make Lotus 1-2-3 happen.) The specification was copyright 1981.

DIF was a registered trademark of Software Arts Products Corp. (a legal name for Software Arts at the time).


DIF stores everything in an ASCII text file to mitigate many cross-platform issues back in the days of its creation. However modern spreadsheet software, e.g. Calc and Gnumeric, offer more character encoding to export/import. The file is divided into 2 sections: header and data. Everything in DIF is represented by a 2- or 3-line chunk. Headers get a 3-line chunk; data, 2. Header chunks start with a text identifier that is all caps, only alphabetic characters, and less than 32 letters. The following line must be a pair of numbers, and the third line must be a quoted string. On the other hand, data chunks start with a number pair and the next line is a quoted string or a keyword.


A value occupies two lines, the first a pair of numbers and the second either a string or a keyword. The first number of the pair indicates type:

Header chunk[edit]

A header chunk is composed of an identifier line followed by the two lines of a value.

The numeric values in header chunks use just an empty string instead of the validity keywords.

Discrepancies in implementations[edit]

Some implementations (notably those of older Microsoft products) swapped the meaning of VECTORS and TUPLES. Some implementations are insensitive to errors in the dimensions of the table as written in the header and simply use the layout in the DATA section.


For example, assume we have two columns with one column header row and two data rows:

has a double quote " in text-3

In a .dif file, this would be (arrowed text indicates comments):

 TABLE 0,1 "EXCEL" VECTORS      → the number of columns follows as a numeric value 0,2        → '0' indicates that it's a numeric type, '2' since we have 2 columns "" TUPLES      → the number of rows follows as a numeric value 0,3        → '0' indicates that it's a numeric type, '3' since we have 3 rows "" DATA      → after a dummy 0 numeric value, the data for the table follow 0,0        → this is the dummy 0 numeric value "" -1,0      → '-1' for the directive type. This is followed by either a 'BOT' or an 'EOD' BOT      → signifies the start of a row 1,0        → '1' since the cell contains a string. (The second number is ignored) "Text"      → this is the String that's in the cell 1,0          → '1' since the cell contains a string. "Number"  -1,0   BOT      → Another row with a String ( (1,0) → "hello" ) , and then a numeric value ( ''(0,1)'' ) 1,0  "hello" 0,1      → numeric value ('0') of value '1' V        → All together now, 'V' is for 'Valid' -1,0  BOT      → Aaaaaand another row 1,0 "has a double quote "" in text" 0,-3 V -1,0  EOD      → End of Data 


External links[edit]