Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
Supprimer des lignes dans un fichier CSV
Auteur Message
Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Bonjour,

Voilà j'expose mon niveau en programmation batch : faible, très faible.
J'utilise souvent de petits fichiers batch pour exécuter des commandes ou lancer des exécutables.

Aujourd'hui je tente en vain de réaliser un batch qui me permettrai de faire ceci :

Mon fichier CSV est composée d'une multitudes de lignes éditées de la manière suivante :
2017-04-25 09:58:43;34;0;288;0;0;0;0;0;0;0
2017-04-25 09:58:44;34;0;279;0;0;0;0;0;0;0
2017-04-25 09:58:45;34;0;274;0;0;0;0;0;0;0d
Les colonnes qui m’intéressent sont la 1ère, la date et l'heure incrémentée à la seconde, et la 4ème colonne qui est représente un débit.

Je voudrais être capable de comparer les 60 valeurs de débits d'une même minute, et ne retenir que la ligne contenant la valeur maximale en débit de la minute, et supprimer les 59 autres lignes.

Tous mes essais se sont révélés infructueux, je suis hors compétence... Crying or Very sad
Alors je fais appel à vous, au forum pour me venir en aide.

Merci d'avance à tous et celles qui voudront bien m'apporter leur soutien. Okay
Bonne journée.

Johann.



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Et pour info mon fichier CSV s'appelle Log2_H24.csv et est situé dans le même dossier que mon fichier bat.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Bonjour,

Essaie ça :

Code:
@echo off
color 0F
Setlocal enableextensions enabledelayedexpansion
chcp 1252 > nul
mode con cols=50 lines=15

set fichier=%~dp0Log2_H24.csv
set temp=%~dp0Temp0123456

if exist "%temp%" (rd /S /Q "%temp%")

md "%temp%"

cd %temp%

cls & echo. & echo ***** Traitement en cours ... *****
echo.

for /f "usebackq tokens=1-7 delims=:; " %%A in ("%fichier%") do (
echo %%A %%B:%%C:%%D;%%E;%%F#%%G >> temp_%%Bh%%C.txt
)

for /f "tokens=*" %%H in ('dir /b "temp_*.txt"') do (
set /a val2=0
for /f "tokens=1,2 delims=#" %%I in (%%H) do (
set /a val1=%%J
if !val1! GTR !val2! (set /a val2=!val1! & set val3=%%I)
)
echo !val3!;!val2! >> resultat.txt
)

move /Y "resultat.txt" "%~dp0Log2_H24.csv" > nul
del /F "*.txt" > nul
cd %~dp0
rmdir /S /Q "%temp%" > nul

cls
echo. & echo ***** Traitement terminé *****
echo.

pause
Endlocal
exit




Dernière édition par barnabe0057 le Mer 26 Avr 2017 - 18:07; édité 1 fois
Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Premièrement merci Barnabé !

Je viens de tester ton fichier : ça ne semble pas fonctionner.

Alors pour t'aiguiller j'ai ajouter pas mal de pause.
Le batch génère bien un répertoire temporaire dans le répertoire actif,
mais il ne semble pas réussit à créer le fichier texte resultat.txt,
d'ailleurs à la ligne de commande "Echo !val3!;!Val2! 1>>resulat.txt" le message "fichier introuvable" apparait.

J'ai joint le fichier CSV en question pour que tu puisses faire un teste de ton côté.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
J'ai trouvé une petite erreur que j'ai corrigé dans mon précédent message.

Tu as joint le fichier CSV ? Où ça ?



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Et là il y est ?
http://www.sendspace.com/file/ibidlv



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Ok ça va aller vite.

edit: voilà c'est tout bon pour moi, j'espère que ce sera bon pour toi aussi.

Code:
@echo off
color 0F
Setlocal enableextensions enabledelayedexpansion
chcp 1252 > nul
mode con cols=60 lines=45

set fichier=%~dp0Log2_H24.csv
set temp=%~dp0Temp0123456

if exist "%temp%" (rd /S /Q "%temp%")

md "%temp%"

cd %temp%

cls & echo. & echo ***** Traitement en cours ... *****
echo.

for /f "usebackq tokens=1-7 delims=:; " %%A in ("%fichier%") do (
echo %%A %%B:%%C:%%D;%%E;%%F#%%G >> temp_%%A_%%Bh%%C.txt
echo %%A %%B:%%C:%%D;%%E;%%F#%%G
)

for /f "tokens=*" %%H in ('dir /b "temp_*.txt"') do (
set /a val2=0
for /f "tokens=1,2 delims=#" %%I in (%%H) do (
set /a val1=%%J
if !val1! GTR !val2! (set /a val2=!val1! & set val3=%%I)
)
echo !val3!;!val2! >> resultat.txt
)

move /Y "resultat.txt" "%fichier%" > nul
del /F "*.txt" > nul
cd %~dp0
rmdir /S /Q "%temp%" > nul

cls
echo. & echo ***** Traitement terminé *****
echo.

pause
Endlocal
exit


Le fichier est plus gros que je pensais, le script a tourné pendant presque 10 minutes.



Dernière édition par barnabe0057 le Mer 26 Avr 2017 - 21:05; édité 1 fois
Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Merci cela fonctionne nickel.
Je vais ôter la pause en fin du script pour une automatisation totale.
Dernière question : si je souhaite finalement sauvegarder le fichier avec les valeurs maxi sous un nom différent du fichier origine, quelles les lignes de codes à modifier ?
Par exemple le fichier final pourrait s'appeler Log2Maxi.csv ?

Et promis plus aucune question supplémentaire.
Encore merci pour avoir consacré du temps pour les autres, merci à toi, merci au forum.
Johann.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Tu peux modifier %fichier% dans la commande move :

Code:
move /Y "resultat.txt" "%~dp0Log2Maxi.csv"


edit: je vais rajouter une ligne au script pour qu'on puisse voir ce qui se passe.

J'ai l'impression qu'il y a un problème, je cherche ce qui cause des messages d'erreur vers la fin.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Ne jamais dire jamais....

J'ai tenté de créer à partir de ton script une réduction en ne conservant cette fois-ci que les valeurs mini, en replaaçcant toutes les ">" par "<".
Mais comme cela ne fonctionne pas, ce n'était à priori pas aussi simple....

Quelles lignes dois-je modifier ?
merci.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Voilà pour récupérer 1 fichier avec les mini et 1 fichier avec les maxi :

Code:
    @echo off
    color 0F
    Setlocal enableextensions enabledelayedexpansion
    chcp 1252 > nul
    mode con cols=60 lines=45
     
    set fichier=%~dp0Log2_H24.csv
    set temp=%~dp0Temp0123456
     
    if exist "%temp%" (rd /S /Q "%temp%")
     
    md "%temp%"
     
    cd %temp%
     
    cls & echo. & echo ***** Traitement en cours ... *****
    echo.
     
    for /f "usebackq tokens=1-7 delims=:; " %%A in ("%fichier%") do (
    echo %%A %%B:%%C:%%D;%%E;%%F#%%G >> temp_%%A_%%Bh%%C.txt
    echo %%A %%B:%%C:%%D;%%E;%%F#%%G
    )
     
    for /f "tokens=*" %%H in ('dir /b "temp_*.txt"') do (
    set /a val2=0
    for /f "tokens=1,2 delims=#" %%I in (%%H) do (
    set /a val1=%%J
    if !val1! GTR !val2! (set /a val2=!val1! & set val3=%%I)
    )
    echo !val3!;!val2! >> maxi.txt
    )
     
    move /Y "maxi.txt" "%~dp0Log2Maxi.csv" > nul
   
    for /f "tokens=*" %%H in ('dir /b "temp_*.txt"') do (
    set /a val2=5000
    for /f "tokens=1,2 delims=#" %%I in (%%H) do (
    set /a val1=%%J
    if !val1! LSS !val2! (set /a val2=!val1! & set val3=%%I)
    )
    echo !val3!;!val2! >> mini.txt
    )

    move /Y "mini.txt" "%~dp0Log2Mini.csv" > nul

    del /F "*.txt" > nul
    cd %~dp0
    rmdir /S /Q "%temp%" > nul
     
    cls
    echo. & echo ***** Traitement terminé *****
    echo.
     
    pause
    Endlocal
    exit


J'ai trouvé le problème, c'est quand le débit est supérieur à 1000, je cherche une solution, je te tiens au courant demain.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Ahhhhh
Je ne suis pas le seul à rencontrer des problèmes liés au nombre de digit !
Allez bonne nuit, et reprenons demain et ensemble nos recherches !



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Merci bonne nuit également.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Bonjour barnabe0057,

Nous avons bien fait de nous arrêter hier soir...
Voilà pourquoi, je viens juste de le découvrir.... :
Pour information j'utilise le résultat du script, le fichier Log2Maxi.csv, comme source d'importation pour un de mes logiciel (avec un moteur d'importation FFValuesImport.exe).
Mon logiciel sait gérer une base de données de 1 minute, mais par contre le moteur d'importation ne sait importer une BDD CSV au pas de 1 minute....
Le pas minimum pour le moteur doit être 5 minutes....

Peux-tu dans le cadre du correctif (gestion des valeurs supérieures à 1000, et sauvegarde du résultat Max et Min en Log2Maxi.csv et Log2Mini.csv),
prévoir de ne conserver que les valeurs minimales et maximales à l'intérieur de 5 minutes, par exemple : 00:00 à 00:05, puis 00:05 à 00:10 ?
Pour te simplifier la vie je peux m'arranger à débuter chaque fichier "Source primaire (le fichier Log2_H24.csv) à 00:00.

Bon début de matinée à toi, et au forum ! moz_cool

Johann.



Répondre en citant
Message Supprimer des lignes dans un fichier CSV 
Coucou, j'y suis presque, j'ai trouvé une correction pour les débits supérieurs à 1000, j'ai fait avec des intervalles de 5 min.

Un bug de dernière minute s'est invité Evil or Very Mad je lui règle son compte et je reviens Mr. Green



Message Supprimer des lignes dans un fichier CSV 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 2
Aller à la page: 1, 2  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch