Probleme de virgule

Résolu
colonelblondass Messages postés 12 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 22 février 2012 - 8 nov. 2011 à 10:20
dbashell Messages postés 3 Date d'inscription dimanche 27 novembre 2011 Statut Membre Dernière intervention 27 novembre 2011 - 27 nov. 2011 à 11:59
Bonjour à vous Forum,

J'ai un énorme problème en SQL.

J'ai une table avec plus de 21 millions d'enregistrements et en l'important, la colonne avec la pondération a eu un problème : les virgules ont disparu (ce qui veut dire qu'à la place d'avoir "2.452" j'ai "2452.0" .

Je suis sur SQL server et j'ai mis ma colonne en float.

Puis-je faire quelque chose d'autre que me retaper l'importation qui a duré très longtemps ?

Merci à vous,

Cordialement,

ColonelBlondass

8 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
8 nov. 2011 à 11:05
Bonjour,

Tu as importé ca à partir de quel fichier ?

Tu devrais pouvoir t'en tirer avec des UPDATE mais je ne peux pas t'en dire plus si tu ne me donnes pas plus d'informations.

En règle générale, quand tu as une table énorme, essaye d'abord de tester les modifs sur un petit échantillon.

Là tu peux toujours créer une autre table en ne sélectionnant que 200 lignes et voir comment tu peux t'en sortir avec les update.
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
8 nov. 2011 à 11:32
Voilà, il suffit que tu créé un fichier decoupe.vbs et que tu colles ca dedans :

nom_fichier_entree = "D:\fichier.txt"
nom_fichier_sortie = "D:\res.txt"

Dim fichierSortie
Dim fichierEntree
Set fichierSortie = CreateObject("Scripting.FileSystemObject").OpenTextFile(nom_fichier_sortie, 2, True)
Set fichierEntree = CreateObject("Scripting.FileSystemObject").OpenTextFile(nom_fichier_entree, 1, False)
Dim compteur
Dim ligne

compteur=0
Do While fichierEntree.AtEndOfStream = False And compteur < 100
ligne = fichierEntree.ReadLine
fichierSortie.write(ligne)
fichierSortie.writeBlankLines 1
compteur=compteur+1
Loop
fichierEntree.Close
fichierSortie.Close


Ensuite, tu modifie le code pour donner le chemin vers ton fichier à découper (nom_fichier_entree) et le chemin vers le resultat (nom_fichier_sortie).

Avec ce code, tu pourras découper les 100 premieres lignes de ton fichier et voir à quoi elles ressemblent.

Ensuite donne moi les 10 premières lignes si tu as des soucis
3
colonelblondass Messages postés 12 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 22 février 2012
8 nov. 2011 à 11:09
Merci Julien,

J'ai bien testé avec des update sur des morceau de ma table, mais je galère.

J'ai importé un fichier txt de plusieurs go, je ne peux ni l'ouvrir avec bloc-notes, ni avec rien de ma connaissance si ce n'est SQL-server.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
8 nov. 2011 à 11:13
Tu travailles sur un poste de travail windows, unix ou linux ?

Je vais te donner un truc qui permet de fractionner ton fichier.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
8 nov. 2011 à 11:29
Avec SQL server, c'est forecement windows, attend une seconde, je te bidouille un code.
0
colonelblondass Messages postés 12 Date d'inscription jeudi 30 juin 2011 Statut Membre Dernière intervention 22 février 2012
8 nov. 2011 à 11:50
J'ai vu mon problème, j'ai exporté la table en format texte, et j'ai découvert ceci :
sur le fichier importer, le séparateur est ";" et les décimales ","
sur le fichier exporter, le séparateur est "," et il n'y a pas de décimales.

J'ai du mal importer mon fichier.

Vu que quand j'avais 3.154 c'est devenu 3154, si je divise toute ma colonne pas 1000, mes chiffres redeviennent bons. (merci à un membre d'un autre forum).

Ton code pour couper les fichiers est excellent, il va bien me servir par la suite.

Merci beaucoup.

Amitiés,

Colonel Blondass
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
8 nov. 2011 à 13:12
Attention, cette solution n'est valable que si tu n'as que trois et seulement trois chiffres après la virgule.

Par exemple 3,154 et 31,54 pourraient être devenus 3154. Comment les différencient tu ?

Si tu as toujours 3 chiffres, c'est bon.

C'est ce genre de particularité sur le fichier que j'aurais bien aimé voir si tu m'avais donné quelques lignes en exemples.

Si tu ne veux pas que ca traine sur internet, je supprimerai le message après.
0
dbashell Messages postés 3 Date d'inscription dimanche 27 novembre 2011 Statut Membre Dernière intervention 27 novembre 2011
27 nov. 2011 à 11:59
Salut les gars,
juste pour votre culture (et peut-être pour l'avenir), ce n'ai pas parce que SQL server tourne forcement sous windows que vous ne pouvez pas scripter depuis un bon vieux linux !!!
Il vous suffit d'installer FreeTds (sous Linux ou autre) qui est un client tds donc compatible SQL server et Sybase et le tour est joué ...
Pour l'installer, vous pouvez utiliser ce post qui est très bien fait "install freetds"
A partir de là, vous bénéficier de toute la puissance des outils "unix like" comme le shell par exemple.

Un bon script pour ne pas faire deux fois la même chose ...
0
Rejoignez-nous