user
Comment faire un script bash our transformer un fichier csv en un fichier ofx ?
alphonsio

Créer un script Bash pour transformer un fichier CSV en un fichier OFX nécessite plusieurs étapes, car le format OFX (Open Financial Exchange) est basé sur XML et suit une structure spécifique.

Étapes du script :

  1. Lire le fichier CSV et extraire les données.
  2. Convertir ces données en un format compatible OFX.
  3. Générer un fichier OFX avec les balises XML requises.

Voici un exemple de script Bash pour cela :

#!/bin/bash

# Vérification des arguments
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 input.csv output.ofx"
    exit 1
fi

input_file="$1"
output_file="$2"

# Création de l'en-tête du fichier OFX
cat <<EOL > "$output_file"
OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:UTF-8
CHARSET:NONE
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NONE

<OFX>
    <BANKMSGSRSV1>
        <STMTTRNRS>
            <TRNUID>1001</TRNUID>
            <STATUS>
                <CODE>0</CODE>
                <SEVERITY>INFO</SEVERITY>
            </STATUS>
            <STMTRS>
                <CURDEF>EUR</CURDEF>
                <BANKTRANLIST>
EOL

# Lecture et conversion des données CSV en OFX
tail -n +2 "$input_file" | while IFS=',' read -r date amount payee; do
    echo "                    <STMTTRN>" >> "$output_file"
    echo "                        <TRNTYPE>DEBIT</TRNTYPE>" >> "$output_file"
    echo "                        <DTPOSTED>${date//[-]/}</DTPOSTED>" >> "$output_file"
    echo "                        <TRNAMT>$amount</TRNAMT>" >> "$output_file"
    echo "                        <NAME>$payee</NAME>" >> "$output_file"
    echo "                    </STMTTRN>" >> "$output_file"
done

# Fermeture des balises OFX
cat <<EOL >> "$output_file"
                </BANKTRANLIST>
            </STMTRS>
        </STMTTRNRS>
    </BANKMSGSRSV1>
</OFX>
EOL

echo "Conversion terminée : $output_file"

Explication :

  • Le script prend en entrée un fichier CSV et un fichier de sortie OFX.
  • Il commence par écrire l’en-tête du fichier OFX.
  • Il lit les lignes du fichier CSV (en ignorant l’en-tête) et insère les transactions dans le format OFX.
  • Le format OFX nécessite une date sans tirets (YYYYMMDD), ce qui est pris en charge par la commande ${date//[-]/}.
  • Le script ferme ensuite les balises et termine le fichier.

Exigences :

  • Le fichier CSV doit être structuré comme suit :
Date,Montant,Payee
2024-02-01,-50.00,Supermarché
2024-02-02,1200.50,Salaire
  • Il faut s'assurer que les montants sont bien formatés (point comme séparateur décimal).
  • Ce script suppose que toutes les transactions sont des débits ; vous pouvez ajuster <TRNTYPE> en fonction du montant (crédit/débit).