Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  sql loader

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql loader

n°1561297
floflo164
Posté le 16-05-2007 à 16:34:12  profilanswer
 

Bonjour,
svp j'ai un problème; j'ai un fichier qui comprend près de 2000 lignes et je veux remplir une table oracle à partir du fichier.  
pour cela j'utilise l'outil sql loader; mais le problème que je rencontre est que les différents champs du fichier ne sont pas délimités. comment convertir le fichier en un fichier avec délimiteur avant de faire le load?
voici une partie du fichier:

Citation :

<gsm utc="20070508200447" type="2" imsi="615010100522901" aTon="0" bIsdn="3386508" bTon="2" svc="11" bear="00" time="000047" msc="040011" loc="00011" cell="00062" imei="35800800690947" origin="0" chan="0"></gsm>
 <gsm utc="20070508200327" type="2" imsi="615010100524907" aTon="0" bIsdn="002218362898" bTon="1" svc="11" bear="00" time="000131" msc="040011" loc="00011" cell="00565" imei="35400900809249" origin="1" chan="0"></gsm>
 <gsm utc="20070508195113" type="2" imsi="615010100337448" aTon="0" bIsdn="001018" bTon="1" svc="11" bear="00" time="000850" msc="040011" loc="00011" cell="00030" imei="35394101031678" origin="1" chan="0"></gsm>
 <gsm utc="20070508200100" type="2" term="2" imsi="615010100484602" aTon="0" bIsdn="9199090" bTon="2" svc="11" bear="00" time="000266" msc="040011" loc="00011" cell="00016" imei="35800200218667" origin="0" chan="0"></gsm>
 <gsm utc="20070508200508" type="2" imsi="615010100707568" aTon="0" bIsdn="2263519" bTon="2" svc="11" bear="00" time="000018" msc="040011" loc="00011" cell="00730" imei="35984100041571" origin="0" chan="0"></gsm>
 <gsm utc="20070508200456" type="2" imsi="615010100975274" aTon="0" bIsdn="9834084" bTon="2" svc="11" bear="00" time="000034" msc="040011" loc="00011" cell="00087" imei="52008261402755" origin="0" chan="0"></gsm>
 <gsm utc="20070508200418" type="2" imsi="615010101037432" aTon="0" bIsdn="9402220" bTon="2" svc="11" bear="00" time="000075" msc="040011" loc="00011" cell="00012" imei="35762000102462" origin="0" chan="0"></gsm>
 <gsm utc="20070508200259" type="2" imsi="615010100585766" aTon="0" bIsdn="9462955" bTon="2" svc="11" bear="00" time="000156" msc="040011" loc="00011" cell="00028" imei="35453201112751" origin="0" chan="0"></gsm>
 <gsm utc="20070508200529" type="2" imsi="615010100829351" aTon="0" bIsdn="4471076" bTon="2" svc="11" bear="00" time="000009" msc="040011" loc="00011" cell="00076" imei="35077020641076" origin="0" chan="0"></gsm>
 <gsm utc="20070508200459" type="2" imsi="615010100355897" aTon="0" bIsdn="2356901" bTon="2" svc="11" bear="00" time="000039" msc="040011" loc="00011" cell="00209" imei="35222300516332" origin="0" chan="0"></gsm>
 <gsm utc="20070508200407" type="2" term="2" imsi="615010100303025" aTon="0" bIsdn="9082674" bTon="2" svc="11" bear="00" time="000092" msc="040011" loc="00011" cell="00086" imei="35835800229666" origin="0" chan="0"></gsm>
 <gsm utc="20070508200527" type="2" term="2" imsi="615010100357821" aTon="0" bIsdn="9040000" bTon="2" svc="11" bear="00" time="000012" msc="040011" loc="00011" cell="00016" imei="35557000391829" origin="1" chan="0"></gsm>
 <gsm utc="20070508200511" type="2" imsi="615010101017568" aTon="0" bIsdn="2719459" bTon="2" svc="11" bear="00" time="000016" msc="040011" loc="00011" cell="00086" imei="35861200132624" origin="0" chan="0"></gsm>
 <sms utc="20070508200529" type="1" imsi="615010100285302" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00014" imei="35725800998454"></sms>
 <sms utc="20070508200530" type="1" imsi="615010100269192" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00162" imei="35251300337409"></sms>
 <sms utc="20070508200530" type="1" imsi="615010100496392" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00565" imei="35862200653685"></sms>
 <sms utc="20070508200531" type="1" imsi="615010100719946" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00721" imei="35883600596190"></sms>
 <sms utc="20070508200531" type="1" imsi="615010100829364" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00570" imei="35839700816617"></sms>
 <sms utc="20070508200531" type="1" imsi="615010100411844" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00786" imei="35301600076961"></sms>
 <sms utc="20070508200532" type="1" imsi="615010100517325" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00015" imei="35598700026833"></sms>
 


 je voudrais que "utc", "type", "imsi", ... soient les noms des champs et leur valeur respective soit la ligne.
merci de votre réponse.

mood
Publicité
Posté le 16-05-2007 à 16:34:12  profilanswer
 

n°1561466
jbourdello​n
Posté le 16-05-2007 à 22:59:36  profilanswer
 

C'est du XML ton fichier, donc une xsl(t) et tu devrais pouvoir le convertir facilement...

n°1561880
floflo164
Posté le 18-05-2007 à 09:26:49  profilanswer
 

jbourdellon a écrit :

C'est du XML ton fichier, donc une xsl(t) et tu devrais pouvoir le convertir facilement...


 
bonjour  
merci d'avoir répondu; tu dis

Citation :

donc une xsl(t) et tu devrais pouvoir le convertir facilement...


mais j'ai pas très bien compris ce ke tu disais par là; et je peux convertir avec sql loader toujours? ou bien un autre outil ? si oui lequel?
svp, aidez-moi.  
merci

n°1561908
olivthill
Posté le 18-05-2007 à 10:54:24  profilanswer
 

Une méthode à l'ancienne qui marche est de faire une petite moulinette, par exemple en VBS pour contvertir le fichier :

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, f_in, f_out
Set fso = CreateObject("Scripting.FileSystemObject" )
Set f_in = fso.OpenTextFile("fichier_in.txt", ForReading,True)
Set f_out = fso.OpenTextFile("fichier_out.txt", ForWriting,True)
 
Do While f_in.AtEndOfLine <> True
   l_in = f_in.ReadLine
 
   v_utc = "null"
   j = instr(l_in, "utc=" )
   If (j <> 0) Then
      k = instr(j + 5, l_in, chr(34))
      If (k > j) Then
         v_utc = mid(l_in, j + 5, k - j - 5)
      End If
   End If
 
   v_type = "null"
   j = instr(l_in, " type=" )
   If (j <> 0) Then
      k = instr(j + 7, l_in, chr(34))
      If (k > j) Then
         v_type = mid(l_in, j + 7, k - j - 7)
      End If
   End If
 
   f_out.WriteLine "INSERT INTO table_toto(utc, type)" _
                   & " VALUES('" & v_utc & "', '" & v_type & "'" _
                   & " );"
Loop
 
f_out.Close
f_in.Close


Mettre ces lignes dans un fichier nommé, par exemple, cvt_fic1.vbs et cliquer sur ce fichier.
Avec les données en exemple, cela donne :

INSERT INTO table_toto(utc, type) VALUES('20070508200447', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200327', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508195113', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200100', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200508', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200456', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200418', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200259', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200529', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200459', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200407', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200527', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200511', '2');
INSERT INTO table_toto(utc, type) VALUES('20070508200529', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200530', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200530', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200531', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200531', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200531', '1');
INSERT INTO table_toto(utc, type) VALUES('20070508200532', '1');

Puis, il n'y a plus qu'à lancer sqlplus avec ce fichier.

n°1562169
floflo164
Posté le 18-05-2007 à 18:24:33  profilanswer
 

hello, merci olivthill,
j'ai essayé ton script et je sens ke ça m'aiderait parce que j'ai fait un essai et pour utc et type, ça marche, parfaitement. maina pour les autres, ça ne marche pas parce que là où tu as fait
 

Citation :


If (j <> 0) Then  
      k = instr(j + 5, l_in, chr(34))  
      If (k > j) Then  
         v_utc = mid(l_in, j + 5, k - j - 5)  
      End If  
 


et

Citation :


   If (j <> 0) Then  
      k = instr(j + 7, l_in, chr(34))  
      If (k > j) Then  
         v_type = mid(l_in, j + 7, k - j - 7)  
      End If  


je me demandes comment tu fais pour ajouter "5" et ensuite "7" ; moi j'ai fait une incrémentation de 2 à chaque fois et ça ne marche pas;
. peut tu m'expliquer cette partie? c'est quoi les nombres là?
grand merci de ta part.


Message édité par floflo164 le 18-05-2007 à 18:26:16
n°1562237
olivthill
Posté le 18-05-2007 à 22:36:03  profilanswer
 

Les chiffres 5 et 7 que j'ai utilisés correspondent aux nombres de caractères entre le début de l'étiquette et le début de la valeur pour le champ. Par exemple la longueur de "utc=" est 4, mais il faut aussi aller au delà du premier guillemet, donc 4+1=5. Pour le deuxième champ, j'ai aussi inclus l'espace du début, mais ce n'était pas obligatoire.
 
Dans mon code, chr(34) désigne un guillemet.
mid(chaine, début, longueur) prend un morceau de la chaine à partir de la position de début indiquée, et sur une longueur qui lui est indiquée.
instr(...) signifie de faire une recherche "in string". Il y a deux syntaxes :
1. La syntaxe avec deux paramètes, par exemple, j = instr(l_in, "utc=" ) qui met dans j la position du début de "utc=" à l'intérieur de la chaine l_in. Si "utc=" n'est pas trouvé, j contiendra zéro.
2. La syntaxe avec trois paramètes, par exemple, k = instr(j + 5, l_in, chr(34)), qui commence la recherche à partir de la position qui est donnée dans le premier paramètre, ici j+5.
 
Le programme recherche une étiquette, par exemple "utc=". Il calcule le début de la valeur associée, en ajoutant la longueur de l'étiquette et du premier guillemet. Il recherche la position du guillemet fermant. Il prend la sous-chaine se trouvant entre le premier guillemet et le deuxièem guillemet.
 
Pour le champ imsi, on aurait :

 v_imsi = "null"  
   j = instr(l_in, " imsi=" )  
   If (j <> 0) Then  
      k = instr(j + 7, l_in, chr(34))  
      If (k > j) Then  
         v_imsi = mid(l_in, j + 7, k - j - 7)  
      End If  
   End If


On pourrait écrie le même genre de programme en C, en PHP, en shell Unix, etc.

n°1562814
floflo164
Posté le 21-05-2007 à 10:51:54  profilanswer
 

hello olivthill,
merci infiniment pour ton aide. grâce à toi j'ai pu résoudre mon pble.
merci

n°1563122
floflo164
Posté le 21-05-2007 à 18:26:04  profilanswer
 

hello, svp c'est encore moi; désolée de vous déranger.
mais je veux que mon script commence la lecture du fichier à partir de la seconde ligne, qu'elle ignore la seconde;  
au fait voici le début de mon fichier

Citation :


<cdrs version="1" producer="MAP" utc="20070509093016" utcOffset="+0000" cdrCount="00005662">
 <gsm utc="20070508200450" type="2" term="2" imsi="615010100456969" aTon="0" bIsdn="9310231" bTon="2" svc="11" bear="00" time="000035" msc="040011" loc="00011" cell="00341" imei="35826800500233" origin="0" chan="0"></gsm>
 <gsm utc="20070508200515" type="2" imsi="615010100212636" aTon="0" bIsdn="2213792" bTon="2" svc="11" bear="00" time="000008" msc="040011" loc="00011" cell="00210" imei="35154601987308" origin="0" chan="0"></gsm>
 <gsm utc="20070508200517" type="2" imsi="615010100439569" aTon="0" bIsdn="2209034" bTon="2" svc="11" bear="00" time="000007" msc="040011" loc="00011" cell="00567" imei="35227101175512" origin="0" chan="0"></gsm>
 <sms utc="20070508200535" type="1" imsi="615010100544312" aTon="0" bIsdn="040008" bType="1" pid="0" bTon="2" svc="21" bear="00" time="000001" msc="040011" loc="00011" cell="00029" imei="35839800448909"></sms>
 <gsm utc="20070508200452" type="2" term="2" imsi="615010100963374" aTon="0" bIsdn="9189756" bTon="2" svc="11" bear="00" time="000044" msc="040011" loc="00011" cell="00016" imei="35574500774865" origin="0" chan="0"></gsm>


je ne voudrais pas  travailler sur la ligne

Citation :

<cdrs version="1" producer="MAP" utc="20070509093016" utcOffset="+0000" cdrCount="00005662">


qu'est-ce que je mets pour dire à mon script de commencer à partir de la seconde ligne?
merci infiniment pour votre aide.
klk'un peut-il m'aider? merci

n°1563197
olivthill
Posté le 21-05-2007 à 21:40:47  profilanswer
 

Pour que le script commence à la deuxième ligne, il suffit d'insérer
   f_in.ReadLine  
juste avant la boucle Do While f_in.AtEndOfLine <> True  

n°1563276
floflo164
Posté le 22-05-2007 à 09:28:06  profilanswer
 

Hello, merci beaucoup olivthill.
cc gentil de ta part. mon problème est résolu.
merci et bonne journée

mood
Publicité
Posté le 22-05-2007 à 09:28:06  profilanswer
 

n°1563717
floflo164
Posté le 22-05-2007 à 19:55:30  profilanswer
 

bonjour svp, quelqu'un pourrait m'aider à créer un fichier .bat?
c'est que avec le fichier sql que je génère, je voudrais k'il s'éxécute automatiquement, à la fin de la génération. j'ai cru comprendre qu'un fichier .bat pourrait m'aider (puisqu'il s'exécute automatiquement, je crois); mais je n'ai aucune connaissance de comment je pourrai le faire.
quelqu'un pourrait-il m'aider à le faire?
merci de votre part et bonne soirée
 
(P.S.  pour olivthill, ex


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  sql loader

 

Sujets relatifs
Loader un JS dans la pageNombre non valide SQL Loader
TimeStamp dans le SQL LoaderBesoin d'explication sur un 3ds loader (opengl)
[Flash] Problème de loaderloader de fichier ASE
Loader hérité de l'anim principaleSQL LOADER
sql loader: problème de séparateur "," et number "."(résolu)SQL loader probleme
Plus de sujets relatifs à : sql loader


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR