insérer des lignes dans des fichiers

insérer des lignes dans des fichiers - VB/VBA/VBS - Programmation

Marsh Posté le 14-04-2008 à 18:31:12    

Bonjour, en vue d'insérer des lignes dans des fichiers, J'ai écrit ça en shell unix, mais ça ne marche pas. On m'a conseillé de le faire en vba. Quelqu'un pourrait-il maider?
Merci.
: avec un fichier d'entree "entree.csv" (voir plus bas)
IFS="!"
if [ $# -lt 1 ]
then
   echo "nom du fichier[.csv]"
   exit
fi
for lg in `cat $1`
do
   
  Code=`echo $lg | awk -F";" '{ printf "%s", $1 }'`
  Chaine = `echo $lg | awk -F";" '{ printf "%s", $2 }'`
  Fichier=`echo $lg | awk -F";" '{ printf "%s", $3 }'`
 
 
cat $Fichier | while read theline  
do  
     echo "$theline" >> titi  
     if [ "$theline" = "Insert Into DISCOUNT_RESTRICTIONS Values ("$Code", 5, 3, 15, 0)" ]  
     then  
  echo "Insert Into DISCOUNT_RESTRICTIONS Values ("$Code", "$Chaine)" >> titi  
  fi
  done
 
 
done
mv titi $Fichier
----------------------------------------------------------------------
fichier d'entree "entree.csv"
26231; 5,3,93,0;g041000.sql;!
27753; 5,3,93,0;g041000.sql;!
26233; 5,3,93,0;g041001.sql;!
27754; 5,3,93,0;g041001.sql;!
26235; 5,3,93,0;g041002.sql;!
27755; 5,3,93,0;g041002.sql;!
26237; 5,3,93,0;g041003.sql;!
27756; 5,3,93,0;g041003.sql;!
26263; 5,3,93,0;g041027.sql;!
26264; 5,3,93,0;g041027.sql;!
26265; 5,3,93,0;g041027.sql;!
26266; 5,3,93,0;g041027.sql;!
26267; 5,3,93,0;g041027.sql;!
26268; 5,3,93,0;g041027.sql;!
26269; 5,3,93,0;g041039.sql;!
26270; 5,3,93,0;g041039.sql;!
26291; 5,3,93,0;g041048.sql;!
 
 

Reply

Marsh Posté le 14-04-2008 à 18:31:12   

Reply

Marsh Posté le 15-04-2008 à 09:58:11    

Ceux qui conseillent de programmer en VBA devraient aider les personnes à qui ils conseillent ça ; ils verraient que ça n'est pas toujours la meilleure méthode.
 
Déjà, VBA veut dire Visual Basic for Application, soit un langage de prog lié à un logiciel Microsoft (Excel, Word, Outlook, Access, Powerpoint, ...)
Dans ton cas, ça ne va pas.
Il te reste donc VB6 ou VBS pour faire ton projet.
VB6 passe par une pseudo compil qui délivre un .exe nécessitant des dll de runtime et donc un processus d'installation : un brin chiant pour faire un truc vite fait.
Reste VBS, et en dehors du fait que je ne maîtrise pas trop cette variante de VB, je te conseille d'expliquer ce que fait ton script, car tout le monde ici ne saura pas l'interpréter correctement.
 

Reply

Marsh Posté le 15-04-2008 à 11:38:56    

Bonjour,
j'ai une collection de 195 fichiers. je dois parcourir chaque fichier et lorsque je trouve une ligne
Insert Into DISCOUNT_RESTRICTIONS Values (26255, 5, 3, 15, 0)
je dois insérer à la suite
Insert Into DISCOUNT_RESTRICTIONS Values (26255, 5, 3, 93, 0)
bien sur pour chacun des 195 fic il existe un nombre variable de codes (connus pour chaque fichier) comme "26255" pour lesquels l'opération doit être faite.

Reply

Marsh Posté le 15-04-2008 à 13:05:58    

Salut, peut-être en adaptant qqch comme


Option Explicit
Option Compare Text
 
Private Sub Insertion(ByVal sFichierDepart As String, ByVal sFichierFinal As String, _
                      ByVal sStrCompar As String, ByVal sStrAdd As String)
Dim NumFichier1 As Integer, NumFichier2 As Integer
Dim Chaine As String
Dim Pos As Integer
 
    Close
    NumFichier1 = FreeFile
    Open sFichierDepart For Input As #NumFichier1
    NumFichier2 = FreeFile
        Open sFichierFinal For Output As #NumFichier2
            Do While Not EOF(NumFichier1)
                Line Input #NumFichier1, Chaine
                Print #NumFichier2, Chaine
                Pos = InStr(Chaine, sStrCompar)
                If Pos > 0 Then Print #NumFichier2, sStrAdd
            Loop
        Close #NumFichier2
    Close #NumFichier1
End Sub


Message édité par kiki29 le 15-04-2008 à 13:49:10
Reply

Marsh Posté le 16-04-2008 à 15:50:06    

Le manque de fichiers échantillons se fait sentir, passer par http://cjoint.com/ ou http://www.cijoint.fr/

Reply

Marsh Posté le 18-04-2008 à 12:00:54    

Grand merci à kiki29, mon vba est revenu un peu et sa solution a été légèrement modifiée, ça marche nickel.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed