Recherche multiple dans des tables de CSV

Recherche multiple dans des tables de CSV - SQL/NoSQL - Programmation

Marsh Posté le 24-01-2007 à 13:01:01    

Salut,

  

Je cherche a remplacer une requete du genre :

Code :
  1. select * from ISAUser.csv WHERE Description LIKE '718%' OR Description LIKE '708%' OR OR Description LIKE '915%' OR ...
   


J avais pour idée de creer une table a part avec tout mes codes (708, 718, 915,...)

  

mais dans Description, j'ai par exemple : 718265, 708652,...

  

et la je seche,... si quelqu'un peut me donner une piste ...

 


Merci


Message édité par Z_cool le 24-01-2007 à 14:31:18
Reply

Marsh Posté le 24-01-2007 à 13:01:01   

Reply

Marsh Posté le 24-01-2007 à 13:38:14    

Essaie  
=>
select ... where substr(description,1,3) = monchamp  
 
t'as quel SGBD car niveau fonction tu peux
avoir à la place de substr
=>
Subst , Substring, Mid, Copy ... dépend de ton SGBD ...
 

Reply

Marsh Posté le 24-01-2007 à 13:41:27    

euhhh c est pour mettre dans un script VB, donc ...  
 
Microsoft Jet OLEDB je suppose.
 
mais j y connais pas grand chose, je découvre ... al  aide d exemple et de tuto que je trouve sur le net

Reply

Marsh Posté le 24-01-2007 à 13:45:39    

En fait, je crois que c est pas clair ... Je vais donner un exemple.

 


J ai une table : appelon la Table1 (original)

 

718233 Toto
718368 Titi
708652 Tutu
915879 tata
230489 Lulu
718988 Mimi

 

et j ai une table 2:
708
718

 

Et j'ai donc besoin d une requete qui me retournerait :
718233 Toto
718368 Titi
708652 Tutu
718988 Mimi


Message édité par Z_cool le 24-01-2007 à 13:47:03
Reply

Marsh Posté le 24-01-2007 à 13:56:18    

Essaie ça, faudrait savoir avec quoi ton VB est interfacé :  
Oracle, Db2, Sql server  ... Access ?
=>
 
select table1.monchampde6 , table1.monchamplib
from table1, table2  
where substring(table1.monchampde6,1,3) = table2.monchampde3
 
(ou
select table1.monchampde6 , table1.monchamplib
from table1 inner join table2  
on substring(table1.monchampde6,1,3) = table2.monchampde3)
 
 
Si erreur de syntaxe essaie de remplacer substring avec substr ... mid, copy ...
 
ok ?

Reply

Marsh Posté le 24-01-2007 à 14:11:35    

vttman2 a écrit :

Essaie ça, faudrait savoir avec quoi ton VB est interfacé :
Oracle, Db2, Sql server  ... Access ?
=>

 



avec csv .... et je crois que tout mon probleme va venir de la ...

Reply

Marsh Posté le 24-01-2007 à 14:30:01    

Bon ba j ai reussi.

 


Pour la posterité :

 


Code :
  1. Dim objConn
  2. Dim objRS
  3. Set objConn = CreateObject("ADODB.Connection" )
  4. objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\;Extended Properties='text;FMT=Delimited'"
  5. Set objRS = objConn.Execute("select * from ISAUser.csv WHERE mid(Description,1,3) IN (SELECT CC FROM ListeCC.txt) " )
  6. With objRS
  7.      While Not (.EOF Or .BOF)
  8.          wscript.echo .Fields("Domain" ).Value & ";" & .Fields("Name" ).Value &";" & .Fields("Department" ).Value & ";" &.Fields("Mail" ).Value &";" & .Fields("Description" ).Value & ""
  9.      'wscript.echo .Fields("cc" ).Value & ""
  10.          .MoveNext
  11.      Wend
  12.      .Close
  13. End With
  14. Set objRS = Nothing
  15. objConn.Close
  16. Set objConn = Nothing

 


vttman2 [:xp1700]  Merci tout plein pour le MID( )


Message édité par Z_cool le 24-01-2007 à 14:30:49
Reply

Marsh Posté le 24-01-2007 à 15:58:24    

Bon en faite, si, encore un petit problème:
 
Description est pris comme un champs d'entier, est ce que quelqu'un serait comment forcer un texte ?

Reply

Marsh Posté le 24-01-2007 à 17:20:35    

cstr() je pense.
 
sinon, tu le concatènes avec '' [:magicbuzz]


Message édité par MagicBuzz le 24-01-2007 à 17:20:45
Reply

Marsh Posté le 24-01-2007 à 19:56:23    

non en fait, c est carement le moteur ODBC qui remonte le mauvais genre. j ai trouvé d autre cas similaire sur le net. a parament il faudrait metre un fichier Jesaisplusquoi.ini pour definir ce qui est dans le fichier.
 
le : Jesaisplusquoi, je l ai au boulot, je le posterais demain

Reply

Marsh Posté le 24-01-2007 à 19:56:23   

Reply

Marsh Posté le 25-01-2007 à 14:17:29    

Bon, voila, je me remet sur mon petit script ....
 
le fichier est un : Schema.ini
 
Bon, mission dui jour ... comment on genere un tel fichier...

Reply

Marsh Posté le 25-01-2007 à 14:18:27    

lol :D

Reply

Marsh Posté le 25-01-2007 à 14:19:32    

Le titre ne veut rien dire, mais y'a des exemple de fichier Schema.ini dedans :)
 
http://support.microsoft.com/kb/146224/fr

Reply

Marsh Posté le 25-01-2007 à 14:20:05    

C'est quand même beau :love:
 

Citation :

HOWTO : à travers est dépassé par Utiliser l'authentification SQL d'établir une connexion dans des fichiers texte ASCII

Reply

Marsh Posté le 25-01-2007 à 14:51:20    

Oui, j ai reussi a creer mon fichier .ini.

 

pas trop dur en fin de compt.

 

mais la.. je but sur un autre probleme : mon fichier csv est un peut tout crade, et ma table ressemble plus a :

 


718233 Toto
00718368 Titi
708652 Tutu
915879 tata
230489 Lulu
718988 Mimi et j ai une table 2:
708
718
donc la, MID va plus trop ... domage, je l'aimais bien ....

 

une idee ?

 

Reply

Marsh Posté le 25-01-2007 à 15:10:51    

disons que "prefix" est une table qui contient un champ "val" qui contient tous tes préfixes.
 
"matable" est ta table CSV
 

Code :
  1. select *
  2. from matable inner join prefix
  3. on matable.code like prefix.val + '%'


 
Sinon :

Code :
  1. select *
  2. from matable inner join prefix
  3. on mid(matable.code, 1, length(prefix.val)) = prefix.val


 
Je préfère la première solution :)


Message édité par MagicBuzz le 25-01-2007 à 15:11:28
Reply

Marsh Posté le 29-01-2007 à 16:16:57    

Bon, en fin de compt, j ai fais comme ca :

 
Code :
  1. Set objRS = objConn.Execute("select * from ISAUser.csv WHERE left(right(Description,6),3) IN (SELECT CC FROM ListeCC.txt) " )


puis derriere un autre :

Code :
  1. Set objRS = objConn.Execute("select * from ISAUser.csv WHERE left(right(Description,6),3) NOT IN (SELECT CC FROM ListeCC.txt) " )


ce que je comprend pas, c est qu en théorie, en réunissant ces deux requêtes, je devrais retrouver ma base de départ.

 

Hors, j'en ai 1211 qui passent a la trappe ....

 

et les retrouver parmi 75000.... pas évidant

 

Reply

Marsh Posté le 29-01-2007 à 17:07:15    

utilise ma requête avec le like :o

Reply

Marsh Posté le 30-01-2007 à 08:25:43    

ouai, mais en fait c est plus compliqué que ca, il faut a tout pris que le code de recherche soit a 6 caracteres de la droite.
 
si j ai bien compris ta requete, il detecera aussi bien :
718000
que  
000718
 
me trompe je ?

Reply

Marsh Posté le 30-01-2007 à 10:49:07    

Je pense que tu te trompes, oui.
 
Je pige pas ton problème.
 
Mettons que tu as ça dans ta table des préfixes :
 
123
456
654321
 
Et ça dans tes données :
000123
123000
456123
11234
654321000
126543210
321456
 
Ca va retourner :
 
123000
456123
654321000
 
Re tirn d'autre.


Message édité par MagicBuzz le 30-01-2007 à 10:49:24
Reply

Sujets relatifs:

Leave a Replay

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