sql loader - SQL/NoSQL - Programmation
Marsh Posté le 16-05-2007 à 22:59:36
C'est du XML ton fichier, donc une xsl(t) et tu devrais pouvoir le convertir facilement...
Marsh Posté le 18-05-2007 à 09:26:49
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
Marsh Posté le 18-05-2007 à 10:54:24
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 |
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'); |
Puis, il n'y a plus qu'à lancer sqlplus avec ce fichier.
Marsh Posté le 18-05-2007 à 18:24:33
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 : |
et
Citation : |
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.
Marsh Posté le 18-05-2007 à 22:36:03
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" |
On pourrait écrie le même genre de programme en C, en PHP, en shell Unix, etc.
Marsh Posté le 21-05-2007 à 10:51:54
hello olivthill,
merci infiniment pour ton aide. grâce à toi j'ai pu résoudre mon pble.
merci
Marsh Posté le 21-05-2007 à 18:26:04
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 : |
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
Marsh Posté le 21-05-2007 à 21:40:47
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
Marsh Posté le 22-05-2007 à 09:28:06
Hello, merci beaucoup olivthill.
cc gentil de ta part. mon problème est résolu.
merci et bonne journée
Marsh Posté le 22-05-2007 à 19:55:30
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
Marsh Posté le 16-05-2007 à 16:34:12
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:
<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.