Format de données textuel utilisant la barre verticale comme séparateur de champs — simple, léger, lisible par l'homme et compatible avec tous les langages.
Le format pipe est un format de données textuel utilisant le caractère | (barre verticale, U+007C) comme séparateur de champs. Ce caractère est peu présent dans les données courantes, ce qui limite fortement les conflits lors des imports/exports.
Un fichier pipe est :
|| Format | Séparateur | Avantages | Inconvénients |
|---|---|---|---|
| CSV | , | Standard mondial, support universel | Conflits avec les virgules dans les données |
| CSV FR | ; | Adapté aux locales francophones | Moins interopérable internationalement |
| TAB | \t | Invisible, peu de conflits | Moins lisible, difficile à éditer manuellement |
| PIPE | | | Très lisible, conflits rares, compact | Pas de standard officiel (RFC) |
| JSON | { } | Hiérarchique, typé, standard API | Plus verbeux, moins efficace pour les volumes |
Les champs doivent toujours apparaître dans le même ordre, avec une ligne d'en-tête décrivant chaque colonne.
ID|Nom|Prénom|Email|Actif 1|Dupont|Jean|jean@exemple.com|1 2|Martin|Claire|claire@exemple.com|0 3|Müller|Hans|hans@exemple.com|1
// ── Parser une ligne pipe ────────────────────── $ligne = "FR|France|33|.fr|Paris"; $champs = explode('|', $ligne); echo $champs[0]; // FR echo $champs[1]; // France // ── Parser un fichier complet ───────────────── $lignes = file('data.gapit', FILE_IGNORE_NEW_LINES); $header = explode('|', array_shift($lignes)); foreach ($lignes as $l) { $row = explode('|', $l); $data[] = array_combine($header, $row); } // ── Vérifier la cohérence ───────────────────── if (count($row) !== count($header)) { throw new Exception("Nombre de colonnes incorrect"); }
// ── Parser une ligne ────────────────────────── const ligne = "FR|France|33|.fr|Paris"; const champs = ligne.split('|'); console.log(champs[0]); // "FR" // ── Parser un fichier multi-lignes ──────────── const texte = `ID|Nom|Actif 1|Alice|1 2|Bob|0`; const [header, ...rows] = texte.split('\n'); const cols = header.split('|'); const data = rows.map(row => { const vals = row.split('|'); return Object.fromEntries(cols.map((c, i) => [c, vals[i]])); }); console.log(data);
# ── Parser une ligne ────────────────────────── ligne = "FR|France|33|.fr|Paris" champs = ligne.split('|') print(champs[0]) # FR # ── Parser avec csv.reader ──────────────────── import csv with open('data.gapit', encoding='utf-8') as f: reader = csv.DictReader(f, delimiter='|') for row in reader: print(row['Nom']) # accès par nom de colonne
# ── Lire chaque champ avec IFS ──────────────── IFS='|' read -r code pays tel ext cap <<< "FR|France|33|.fr|Paris" echo "$pays" # France # ── Parser avec awk ─────────────────────────── awk -F'|' 'NR>1 { print $2, $3 }' data.gapit # ── Compter les colonnes de chaque ligne ────── awk -F'|' '{ print NR": "NF" colonnes" }' data.gapit # ── Extraire une colonne spécifique ─────────── cut -d'|' -f2 data.gapit # 2e colonne uniquement
Cas d'usage typiques :
Modifiez les données ci-dessous — le parsing se met à jour en temps réel.