Éditer avec le CRUD
Les commandes CRUD traitent un flux GTFS comme une petite base relationnelle. Ce guide déroule un scénario réaliste : renommer un arrêt, corriger une ligne mal classée, retirer une ligne obsolète — tout en gardant le flux valide à chaque étape.
L’exemple utilise un flux gtfs.zip dans le répertoire courant. Remplacez par votre propre chemin au fil de la lecture.
Scénario
Section intitulée « Scénario »Vous maintenez un flux de transport avec des dizaines de milliers d’arrêts. Un audit récent a signalé trois points à corriger :
- L’arrêt
S01doit être renommé de “Place” à “Gare Centrale”. - Une ligne de bus est mal encodée en
route_type=700(cable tram) et doit passer à3(bus). - Une ancienne ligne
OLD_LINEest mise au rebut — tous les trajets, et les lignes qui les référencent, doivent être retirés.
1. Inspecter avant d’éditer
Section intitulée « 1. Inspecter avant d’éditer »Ne modifiez jamais ce que vous n’avez pas d’abord vérifié. La commande read est en lecture seule et prend la même clause --where que update et delete.
gapline read stops -f gtfs.zip --where "stop_id=S01"La sortie confirme exactement une ligne, avec les champs attendus :
stop_id | stop_name | stop_lat | stop_lon | ...S01 | Place | 45.5017 | -73.5673 | ...Si le match est plus large que prévu, resserrez le filtre :
gapline read stops -f gtfs.zip --where "stop_name LIKE Place%" | wc -l2. Renommer l’arrêt
Section intitulée « 2. Renommer l’arrêt »Réécriture de champ simple — stop_name n’est pas une clé primaire, donc pas de cascade.
gapline update stops -f gtfs.zip \ --where "stop_id=S01" \ --set stop_name="Gare Centrale" \ --confirmRelire pour confirmer :
gapline read stops -f gtfs.zip --where "stop_id=S01"3. Corriger la classification de la ligne
Section intitulée « 3. Corriger la classification de la ligne »Même forme — mise à jour mono-champ, pas de PK. Le --where capte toute ligne au mauvais type, qu’il y en ait une ou plusieurs.
gapline update routes -f gtfs.zip \ --where "route_type=700" \ --set route_type=3 \ --confirmSi l’exécution retourne “NO_CHANGES” (code de retour 4), rien n’a matché — la correction avait déjà été appliquée dans une passe précédente.
4. Retirer l’ancienne ligne
Section intitulée « 4. Retirer l’ancienne ligne »C’est l’étape risquée. Retirer un route_id implique que tous les trajets associés disparaissent, et que toutes les lignes stop_times qui référencent ces trajets disparaissent aussi. gapline calcule cette chaîne automatiquement.
-
Prévisualiser la zone d’impact — lecture seule, pas de surprise :
Fenêtre de terminal gapline read trips -f gtfs.zip --where "route_id=OLD_LINE" | wc -l -
Supprimer les trajets — l’aperçu de cascade liste chaque fichier dépendant qui perdra des lignes :
Fenêtre de terminal gapline delete trips -f gtfs.zip --where "route_id=OLD_LINE"Records to delete from trips.txt:OLD_LINE-T01OLD_LINE-T02... and 47 moreDeleting would also delete:- 1 243 records in stop_times.txt- 12 records in frequencies.txtProceed with cascade delete? [y/N] y -
Retirer la ligne elle-même — elle n’a plus de trajets qui la référencent, donc pas de cascade :
Fenêtre de terminal gapline delete routes -f gtfs.zip --where "route_id=OLD_LINE" --confirm
5. Valider le résultat
Section intitulée « 5. Valider le résultat »Avant de livrer le flux modifié, lancez la validation complète pour confirmer que rien n’a glissé :
gapline validate -f gtfs.zip --min-severity warningSi vous voulez un fichier de sortie séparé, ajoutez --output gtfs-patched.zip au dernier update/delete ou passez-le à un script .gl. Voir écrire des scripts .gl pour une version de ce scénario en un seul batch qui garde le flux source intact jusqu’au succès du save.
Aide-mémoire
Section intitulée « Aide-mémoire »| Intention | Commande |
|---|---|
| Voir ce qui sera impacté. | gapline read <target> --where "…" |
| Modifier un champ (non-PK). | gapline update <target> --where "…" --set field=value --confirm |
| Renommer une clé primaire dans tout le flux. | gapline update <target> --where "…" --set id=new_id --cascade --confirm |
| Retirer des enregistrements et leurs dépendants. | gapline delete <target> --where "…" (aperçu) ou … --confirm (auto-oui) |
| Écrire vers un nouveau fichier. | Ajoutez -o newfeed.zip à n’importe laquelle des commandes ci-dessus. |
Voir aussi
Section intitulée « Voir aussi »gapline read,gapline update,gapline delete— références des commandes.- Concepts / Langage de requête — ce que
--wherepeut exprimer. - Concepts / Intégrité référentielle — comment la cascade est calculée.
- Guides / Écrire des scripts
.gl— même workflow, reproductible.