Data Interchange Format

Data Interchange Format (alias « Navy DIF », avec l'extension de fichier .dif) est un format de données ASCII conçu au début des années 1980 pour permettre la conversion de feuilles de calcul simples (un seul onglet) entre les SGBD d'alors : Lotus 1-2-3, FileMaker Pro, DBase, Framework, Multiplan, etc. Il peut être relu par OpenOffice, LibreOffice, Excel, Gnumeric et StarCalc. Sa principale limitation est qu'il ne permet pas de coder plusieurs onglets d'un tableur dans le même fichier.

Historique 

Le format DIF a été développé par Bob Frankston de Software Arts, Inc. pour VisiCalc au début des années 1980. Les spécifications de format étaient communiquées dans la documentation de VisiCalc, et furent même publiées dans le magazine Byte. Ce format DIF a été breveté en 1981 par Software Arts Products Corp. (raison sociale de Software Arts à l'époque).

Syntaxe 

Afin de s’affranchir des spécificités des différents formats utilisés par les logiciels du début des années 1980, DIF enregistre les données dans un fichier texte au format ASCII. Ce fichier comporte deux sections : une section d’en-tête et une section de données. Dans le format DIF, chaque section est constituée de bloc de 2 ou 3 lignes :
 l’en-tête est codée sur 3 lignes ; 
 les sections de données commencent par un mot-clef en lettres capitales de moins de 32 lettres, ne comportant aucun chiffre. La ligne suivante est une paire de nombres, et la troisième ligne est une chaîne de caractère placée entre guillemets « anglaises » (""). 
 Les données proprement dites sont codées sur deux lignes : la première contient l'indication de format (chaîne ou nombre) et 
 un nombre muet si c'est une chaîne, le nombre dans l'autre cas ;
 sur la deuxième ligne, la chaîne proprement dite, ou une chaîne « informative » (V, ERROR, etc.) si c'est un nombre.

L’en-tête de fichier 
L’en-tête de fichier comporte une ligne de type suivie de deux lignes comportant chacune une valeur :
 TABLE - la première valeur contient le numéro de version, et la seconde ligne (désormais désuète) contenait un champ de commentaire générique.
Les différents champs de données sont marqués par l'une des balises :
 VECTORS permet d'encoder une ligne de valeurs ; la ligne 2 donne le nombre de colonnes.
 TUPLES (n-uplet)  permet d'encoder une colonne de valeurs ; la ligne 2 donne le nombre de lignes.
 DATA - suivi d'un 0 conventionnel, puis des valeurs contenues dans le tableau, permet d'encoder un tableau de valeurs. Chaque ligne commence, conventionnellement, par le mot-clef BOT, et la dernière ligne de la table doit se terminer par le code EOD (« fin des données »).

Les cellules 
Chaque cellule est codée sur deux lignes : 
 la première ligne contient une paire de nombres 
 et la seconde ligne, soit une chaîne de caractères, soit un mot-clef.
Le premier nombre de la première ligne indique le type, le second nombre est ignoré.
Les mots-clefs que l'on peut trouver à la ligne suivante sont :
 BOT – ce mot-clef indique que ce qui suit est un n-uplet (Beginning T-uple)
 EOD – marque la fin du bloc de données (End Of Data).
 0 signale une valeur de type numérique ; dans ce cas, le nombre qui suit est la donnée proprement dite, et la ligne suivante contient l'un des mots-clefs :
 V – valeur réputée correcte
 NA – incompatibilité de type entre le préfixe et la valeur indiquée
 ERROR – erreur
 TRUE – valeur booléenne (« vrai »)
 FALSE – valeur booléenne (« fausse »)
 1 signale une valeur de type chaîne; dans ce cas, le nombre qui suit est ignoré, et la ligne suivante contient la chaîne vide "" (entre guillemets).

Implémentations hétérodoxes 
Certaines implémentations (surtout celles des premiers logiciels de Microsoft) donnaient une interprétation inverse des formats VECTORS et TUPLES. Certaines implémentations ne tiennent même pas compte des dimensions indiquées dans l'en-tête : elles décodent les séparateurs de lignes du bloc de valeur, et ne tiennent compte que de cela.

Exemple 
Supposons par exemple que nous ayons à stocker une feuille de calcul comportant deux colonnes, avec une première ligne de titres, deux lignes d'en-tête de colonne et deux lignes de données :

 
Le codage dans un fichier .dif donnerait :

Sources 
 
 Commentaires de Dan Bricklin, développeur de VisiCalc, sur la page de discussion WP:en
 .

Notes 

Format ouvert