Editer automatiquement les valeurs d'un fichier texte

Editer automatiquement les valeurs d'un fichier texte - Divers - Programmation

Marsh Posté le 30-03-2010 à 21:28:17    

Bonjour ,
 
je n'y connait pas en programation mais à mon travail nous avons la possibilité de faire des macro via un logiciel d'émulation , mon but ici serais de remplacer les valeurs  
mises en évidence en ROUGE pas des autres valeurs que je choisirais via une base de donné ??. Le fichier texte serait alors édité mais juste les valeurs en rouge.
 

Spoiler :

"41020512
[tab field]
[tab field]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"41020513
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"41020525
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]

Reply

Marsh Posté le 30-03-2010 à 21:28:17   

Reply

Marsh Posté le 30-03-2010 à 22:11:59    

Eh bien si on ne sais pas de quel langage tu disposes (quel type de macros ? VB ? ) ça va être compliqué de te répondre.
 
Si tu est sous linux, la commande sed fera ton bonheur.
sed -e 's/motif_a_remplacer/nouveau_motif/g'

Reply

Marsh Posté le 31-03-2010 à 07:47:00    

@Lan Wezel
 
et bien c'est un émulateur pour émuler un logiciel de gestion de stock donc je ne sais pas vraiment ... :/ j'envoie une capture ce jour

Reply

Marsh Posté le 31-03-2010 à 07:59:30    

"Précision je suis sur XP"  
 
En fait je me demandais aussi s'il y avait moyen avec un logiciel (je ne m'y connait pas de trop) de modifier les valeurs en rouge en faisant simplement un copier/coller dans un autre fichier texte exemple je change les valeurs en colant mes codes :

41502503
41506804
41658446

 
 
ils se retrouvent après dans la macro (voir 1er post) il me suffit après de placer la macro dans le dossier du logiciel en question pour que la macro s'exécute avec mes nouveaux codes.
 
voila  :sweat:


Message édité par MaisTuPicolesEnPlus le 31-03-2010 à 08:00:15
Reply

Marsh Posté le 31-03-2010 à 12:37:41    

c'est du  langage VBScript.

Reply

Marsh Posté le 31-03-2010 à 12:56:35    

MaisTuPicolesEnPlus a écrit :

c'est du  langage VBScript.


 
Salut, ces valeur en rouge, qu'on t-elle de particulier ? Comment vas tu les différencier des autres lignes ?

Reply

Marsh Posté le 31-03-2010 à 17:14:06    


 
en fait c'est pour m'éviter une opération répétitive seulement les valeur en rouge change tout le temps donc impossible de faire une simple macro ,
donc l'idée ce serait de faire une base de donnée avec ces valeurs en rouge , je n'aurais plus qu'a renseigné les valeurs en rouge dans un fichier texte par exemple et le reste
se ferait automatiquement.
 
Enfin je ne sais pas ci cela est possible  :sweat:

Reply

Marsh Posté le 31-03-2010 à 17:29:51    

MaisTuPicolesEnPlus a écrit :


 
en fait c'est pour m'éviter une opération répétitive seulement les valeur en rouge change tout le temps donc impossible de faire une simple macro ,
donc l'idée ce serait de faire une base de donnée avec ces valeurs en rouge , je n'aurais plus qu'a renseigné les valeurs en rouge dans un fichier texte par exemple et le reste
se ferait automatiquement.
 
Enfin je ne sais pas ci cela est possible  :sweat:


 
Oui, tu n'a pas réellement besoin d'une base de donnée ou de système de gestion de base de données pour être exacte.
Un petit programme très simple peut être une solution.
Quel est ton langage de prédilection ?

Reply

Marsh Posté le 31-03-2010 à 17:47:00    


 
bien heu , le langage peu importe les macro sont de simple fichier texte moi c'est comme tu veux  :)
 
quel genre de logiciel pourrais faire cela ?


Message édité par MaisTuPicolesEnPlus le 31-03-2010 à 17:47:34
Reply

Marsh Posté le 31-03-2010 à 17:54:44    

Trouve et installe un compilateur Ada, je vais te faire le programme qui va bien.
Pour demain, ça te va ?

Reply

Marsh Posté le 31-03-2010 à 17:54:44   

Reply

Marsh Posté le 31-03-2010 à 18:05:10    


 
super c'est sympa j'installe gnat à l'instant :)

Reply

Marsh Posté le 31-03-2010 à 18:21:34    

Donc, mon  programme prend 4 noms de fichier en paramètre de ligne de commande.
 
Exemple de commande : "Mon_Programme Nom_du_Fichier_Source Nom_du_Ficher_de_Données_à_Modifier Nom_du_Fichier_Cible Nom_de_Fichier_des_Nouvelles_Données".
Où  :

  • Nom_du_Fichier_Source est le nom du fichier à modifier ;
  • Nom_du_Ficher_de_Données_à_Modifier est le nom du fichier contenant les valeurs à modifier ;
  • Nom_du_Fichier_Cible est le nom du nouveau fichier après remplacement des données à modifier ;
  • Nom_de_Fichier_des_Nouvelles_Données est le nom du fichier contenant les données de remplacement.


Ce qui te fait 3 fichier à fournir. Pour un fichier résultant de l'application de mon programme.
Les fichiers contenants chaque valeur à modifier et en remplacement doivent se trouver sur des lignes dans chaque fichier respectifs distinctes.

Reply

Marsh Posté le 31-03-2010 à 20:20:16    


 
 
bien heu pour le fichier à modifier le voici en .txt  

Spoiler :


"VALEUR A MODIFIER
[tab field]
[tab field]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"VALEUR A MODIFIER
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"VALEUR A MODIFIER
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]


 
 
Le fichier avec valeurs (exemple) (sera nommé itm8) Ficher_de_Données_à_Modifier
 

Spoiler :

41512502
41511506
41503502


 
est-il possible de rajouter des valeurs à modifier comme je le souhaite ?
encore merci

Reply

Marsh Posté le 31-03-2010 à 20:33:13    

MaisTuPicolesEnPlus a écrit :


 
 
bien heu pour le fichier à modifier le voici en .txt  

Spoiler :


"VALEUR A MODIFIER
[tab field]
[tab field]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"VALEUR A MODIFIER
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
"VALEUR A MODIFIER
[newline]
"p56
[right]
"9999
[pf6]
[wait inp inh]
wait 1 msec
[pf6]
[wait inp inh]
wait 1 msec
[pf6]


 


Tu veux dire que toute les valeur à modifier son une unique valeur qui est "VALEUR A MODIFIER" ?
Si tu veux.

MaisTuPicolesEnPlus a écrit :


Le fichier avec valeurs (exemple) (sera nommé itm8) Ficher_de_Données_à_Modifier
 

Spoiler :

41512502
41511506
41503502




Non, c'est le fichier des valeur de remplacement ou celui des valeur à modifier. Le Ficher_de_Données_à_Modifier c'est celui d'origine.

MaisTuPicolesEnPlus a écrit :


est-il possible de rajouter des valeurs à modifier comme je le souhaite ?
encore merci


Tu peux mettre toute les valeurs à modifier que tu souhaites en donnant les valeurs de remplacement correspondantes.
 
Donc, tu a un fichier d'origine, appelons le "Origine" il sera remplacer la un fichier dont tu donnera le nom au programme.
Tu doit fournir en plus un fichier de données à modifier et un fichier de données de remplacement.
A moins que tu n'ai qu'une valeurs à modifier comme tu semblait le dire plus haut avec "VALEUR A MODIFIER", auquel cas tu ne doit fournir qu'un fichier de données de remplacement, mais dont la liste doit être ordonnée.

Reply

Marsh Posté le 31-03-2010 à 23:25:57    

Code :
  1. --  replace_value - Is an text utility.
  2. --  Copyright (C) 2010  Numeric Prescience.
  3.  
  4. --  This program is free software: you can redistribute it and/or modify
  5. --  it under the terms of the GNU General Public License as published by
  6. --  the Free Software Foundation, either version 3 of the License, or
  7. --  (at your option) any later version.
  8.  
  9. --  This program is distributed in the hope that it will be useful,
  10. --  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. --  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. --  GNU General Public License for more details.
  13.  
  14. --  You should have received a copy of the GNU General Public License
  15. --  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  16.  
  17.  
  18.  
  19. with Ada.Strings.Unbounded, Ada.Text_Io, Ada.Command_Line;
  20. use Ada.Strings.Unbounded, Ada.Text_Io, Ada.Command_Line;
  21.  
  22. procedure Replace_Value is
  23.   Source, Old_Data, New_Data, Cible, Temp : File_Type;
  24.   Source_Filename, Old_Data_Filename, New_Data_Filename, Cible_Filename, Temp_Filename : Unbounded_String;
  25.   Source_Line, Old_Line, New_Line : String(1..80) := (others => Character'Val(32));
  26.   Source_Line_Last, Old_Line_Last, New_Line_Last : Natural := 0;
  27.   Done : Boolean := True;
  28. begin
  29.   if Argument_Count /= 4 then
  30.      Put_Line("Erreur de commande" );
  31.   else
  32.      Source_Filename := To_Unbounded_String(Argument(1));
  33.      Old_data_Filename := To_Unbounded_String(Argument(2));
  34.      Cible_Filename := To_Unbounded_String(Argument(3));
  35.      New_data_Filename := To_Unbounded_String(Argument(4));
  36.      Temp_Filename := To_Unbounded_String("fichier_temporaire.txt" );
  37.   end if;
  38.   begin
  39.      Open(Source, In_File, To_String(Source_Filename));
  40.   exception
  41.      when Name_Error =>
  42.         Put_line("le fichier source est absent" );
  43.   end;
  44.  
  45.   begin
  46.      Open(Old_Data, In_File, To_String(Old_Data_Filename));
  47.   exception
  48.      when Name_Error =>
  49.         Put_line("un fichier old est absent" );
  50.   end;
  51.   begin
  52.      Open(New_Data, In_File, To_String(New_Data_Filename));
  53.   exception
  54.      when Name_Error =>
  55.         Put_line("un fichier new est absent" );
  56.   end;
  57.  
  58.   Create(Temp, Out_File, To_String(Temp_Filename));
  59.  
  60.   while not End_Of_file(source) loop
  61.      if not End_Of_File(New_Data) then
  62.         if Done then
  63.            Get_Line(New_Data, New_Line, New_Line_Last);
  64.            Get_Line(Old_Data, Old_Line, Old_Line_Last);
  65.            Done := False;
  66.         end if;
  67.      else
  68.         Done := false;
  69.      end if;
  70.      Get_Line(Source, Source_Line, Source_Line_Last);
  71.      if Source_Line_Last /= 0 then
  72.         for I in 1..(Source_Line_Last - Old_Line_Last) + 1 loop
  73.            if Source_Line(I..I+(Old_Line_Last-1)) = Old_Line(1..Old_Line_Last) then
  74.               Put_line(Source_Line(I..I+(Old_Line_Last-1)) & " = " & Old_Line(1..Old_Line_Last));
  75.               if (I > 1) and (Source_Line_Last > I+(Old_Line_Last-1)) Then
  76.                  Put_Line(Temp, Source_Line(1..I-1) & New_Line(1..New_Line_Last) & Source_Line(I+Old_Line_Last..Source_Line_Last));
  77.               elsif (I > 1) then
  78.                  Put_Line(Temp, Source_Line(1..I-1) & New_Line(1..New_Line_Last));
  79.               elsif Source_Line_Last > I+Old_Line_Last then
  80.                  Put_Line(Temp, New_Line(1..New_Line_Last) & Source_Line(Old_Line_Last+1..Source_Line_Last));
  81.               else
  82.                  Put_Line(Temp, New_Line(1..New_Line_Last));
  83.               end if;
  84.               Done := True;
  85.               exit;
  86.            else
  87.               Put_line(Source_Line(I..I+(Old_Line_Last-1)) & " /= " & Old_Line(1..Old_Line_Last));
  88.            end if;
  89.         end loop;
  90.         if not Done then
  91.            Put_Line(Temp, Source_Line(1..Source_Line_Last));
  92.         end if;
  93.      else
  94.         Ada.Text_Io.New_Line(Temp);
  95.      end if;
  96.   end loop;
  97.   Close(Temp);
  98.     -- copy du fichier temps
  99.   Open(Temp, In_File, To_String(Temp_Filename));
  100.   Create(Cible, Out_File, To_String(Cible_Filename));
  101.   while not End_Of_File(Temp) loop
  102.      Get_Line(Temp, Source_Line, Source_Line_Last);
  103.      if Source_Line_Last /= 0 then
  104.         Put_Line(Cible, Source_Line(1..Source_Line_Last));
  105.      else
  106.         Ada.Text_Io.New_Line(Cible);
  107.      end if;
  108.   end loop;
  109.   Close(Cible);
  110.   Close(Temp);
  111.   Close(Source);
  112.   Close(Old_Data);
  113.   Close(New_Data);
  114.  
  115. end Replace_Value;


 
edit := Pour copier et coller le texte, double cliquer sur le code pour faire disparaitre le numéro des ligne, puis sélectionner/copier/coller dans un éditeur.


Message édité par Profil supprimé le 01-04-2010 à 06:57:21
Reply

Marsh Posté le 01-04-2010 à 07:54:08    

merci déjà je regarde à l'instant


Message édité par MaisTuPicolesEnPlus le 01-04-2010 à 07:55:09
Reply

Marsh Posté le 01-04-2010 à 08:05:16    

Excuse moi mais j'ai un petit souci je n'arrive pas à me servir de GNAT pour inclure ton script pourrais-tu m'aider stp ?

Reply

Marsh Posté le 01-04-2010 à 08:11:03    

MaisTuPicolesEnPlus a écrit :

Excuse moi mais j'ai un petit souci je n'arrive pas à me servir de GNAT pour inclure ton script pourrais-tu m'aider stp ?


 
Tu dois nommer le fichier dans lequel tu as copier le code ci-dessus "replace_value.adb".
En suite tu ouvre une "invite de commande" dans laquelle tu te déplaces dans le répertoire contenant le fichier "replace_value.adb".
Puis tu tapes la commande "gnatmake replace_value" qui doit produire un exécutable nommé "replace_value.exe".

Message cité 1 fois
Message édité par Profil supprimé le 01-04-2010 à 08:11:14
Reply

Marsh Posté le 01-04-2010 à 12:17:20    

As-tu atteint ton objectif ?

Message cité 1 fois
Message édité par Profil supprimé le 01-04-2010 à 12:17:28
Reply

Marsh Posté le 01-04-2010 à 13:14:56    


Je regarde , mais ici je suis au travail je n'ai pas les droits admninistrateurs pour installer un logiciel je regarde dès ce soir je te remercie déjà d'avance.

Reply

Marsh Posté le 05-04-2010 à 12:39:42    

@jovalise , désolé mais je n'arrive toujours pas à faire fonctionner GNAT pourrais-tu me dire par ou je dois commencer ?

Reply

Marsh Posté le 05-04-2010 à 12:47:42    


MaisTuPicolesEnPlus a écrit :

@jovalise , désolé mais je n'arrive toujours pas à faire fonctionner GNAT pourrais-tu me dire par ou je dois commencer ?


 
 
C'était écrit au dessus.
 
 
 
 
Quel est le problème ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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