exportation d'un fichier csv dans une base de donnée access

wiss20000
exportation d'un fichier csv dans une base de donnée access

salut,
j'ai un problème et j'epère trouver de l'aide :( :( :( :( :(
en fait j'ai un fichier CSV que je doit faire un traitement
1) Supprimer les 3 premier lignes et les 2 derniers
2) Exporter ce fichier dans une base de donné (Access).
:!: :!: :!: :!:

fredericmazue

Bonjour,

Quote:
1) Supprimer les 3 premier lignes et les 2 derniers

Alors pour ça c'est tout simple. Tu supprimes les 3 premières lignes et les deux dernières et le tour est joué :)

Non non, je ne me moque pas de toi :) Dans la pratique tu vas instancier un objet java.io.BufferedReader en donnant un FileReader à son constructeur.
Après tu appelles la méthode readline du BufferedReader pour lire les lignes une à une en les méttant dans un vector par exemple. Et enfin tu supprimes les 3 premières et les 2 dernières lignes du vector :)

Quote:
2) Exporter ce fichier dans une base de donné (Access).

Là par contre, impossible de t'aider même en le voulant très fort.
Tu dois mettre les données dans une base de données Access soit, mais en fait c'est dans des tables de la base que tu dois mettre les données pour être précis. Tu ne dis rien quant à la structure (les colonnes) de la table
Tu ne dis rien quant au contenu du fichier.
Tu ne dis rien du tout.
Donc impossible de t'aider parce qu'impossible de deviner quel est ton problème exactement. Ni même à quel niveau il se situe. Te connecter à la base :?: Créer une table :?: Remplir une table :?: Faire chauffer une pizza pendant que ça compile :?:
wiss20000

après la suppréssion des 3 premières ligne la nouvelle 1ère ligne contient la liste des champs séparé par une virgule.
et le reste se sont les différentes valeur du champs séparer de meme par des virgules.
:wink: :wink: :wink: :wink: :wink: :wink: :wink: :wink:

bast2
Re: exportation d'un fichier csv dans une base de donnée acc

wiss20000 wrote:
2) Exporter ce fichier dans une base de donné (Access).

Tu veux faire ce traitement automatiquement ou manuellement ?

wiss20000

automatiquemant si possible si non manuellement :cry:
mais je me suis cassé la tete pour faire la 1ère étape (suppréssion de ligne) mais sans résultat, est ce que vous pouvez m'aider ? :?
Merci

fredericmazue

Quote:
après la suppréssion des 3 premières ligne la nouvelle 1ère ligne contient la liste des champs séparé par une virgule.
et le reste se sont les différentes valeur du champs séparer de meme par des virgules.

Hey man :!:
Tu n'as pas l'air content de ce que je t'ai dit. (Je dis ça parce que je n'ai pas vu de merci, ni rien quoi)
Mais.... avec la question telle que tu l'as posée, comme je savais que tu avais un problème de virgule moi :?:

Ca c'est le genre de trucs qui me tuent. Un type pose une question totalement imprécise, on essaie quand même de l'aider, on y passe du temps et il revient dire que ça lui convient pas en se marrant avec des :wink: :wink:
Et puis de toutes façons qu'est-ce que c'est que que ce discours ?
Dans ta question tu as parlé de retirer des lignes. J'y ai répondu. Qu'est-ce que cette histoire de virgule à a voir dans le fait de retirer des lignes
Oui les valeurs dans un fichier CSV sont séparées par des virgules. Mais ça ne gêne pas pour retirer des lignes :wink: :wink: :wink:

Quote:
mais je me suis cassé la tete pour faire la 1ère étape (suppréssion de ligne) mais sans résultat, est ce que vous pouvez m'aider ?

Mais alors c'est un problème de ligne ou de virgules ton affaire ?

Quand tu auras posé une question qui détaille tes problèmes et tes difficultés on verra si on peut t'aider :wink: :wink: :wink: :wink: :wink:

Non sans blague. C'est avec plaisir que je t'aiderai si tu fais une demande d'aide qui soit claire. Et aussi si tu postes un peu du code que tu as écrit, qu'on voit mieux tes problèmes.

wiss20000

voici un extrait du mon fichier

    Date,Time,Object,INSTAT:CA Nr,MSC_HO:CA_HO Nr
    2007/02/25,19:15,MSC01,119452.0,20282.0,88899.0

la première ligne contient la liste des champ de ma base et la deuxième les valeurs
le séparateur est la virgule ',' :oops: [/]

fredericmazue

Quote:

    Date,Time,Object,INSTAT:CA Nr,MSC_HO:CA_HO Nr
    2007/02/25,19:15,MSC01,119452.0,20282.0,88899.0

Qu'est-ce que c'est que ces

    et compagnie :?: :wink: :wink:

    Quote:
    la première ligne contient la liste des champ de ma base et la deuxième les valeurs
    le séparateur est la virgule

    Soit et alors ? On sait bien comment est structuré un fichier CSV.
    Déjà moi ne je comprends pas pourquoi retirer les trois premières lignes. La première je peux comprendre :idea: Les trois premières, mystère :?: :?:

wiss20000

Ad-Hoc Report - Historical SPBH 1 day
Start Date: Sun 25 Feb 2007
End Date: Sun 25 Feb 2007

ces trois ligne je veux les supprimer
mais
Date,Time,Object,INSTAT:CA Nr,MSC_HO:CA_HO Nr
et
2007/02/25,19:15,MSC01,119452.0,20282.0,88899.0
2007/02/25,19:15,MSC09,193339.0,24886.0,4350.0
2007/02/25,21:00,MSC02,288652.0,16632.0,50999.0

je veux les mettre dans une base Access :shock:

fredericmazue

Bon ok pour les trois premières lignes, tu veux les supprimer

En admenttant qu'il n'y ait pas une ligne vide juste derrière, mais c'est plus un détail qu'autre.

Bon tu veux mettre des données dans une table Access. Ca on le comprends aussi.
MAIS tu nous dis que tu veux mettre la ligne

Quote:
Date,Time,Object,INSTAT:CA Nr,MSC_HO:CA_HO Nr

dans la table aussi. C'est bien ce que tu as écrit.
Tu te rends compte de l'énormité j'espère ?
wiss20000

cette ligne contient les champs de ma table

fredericmazue

Quote:
cette ligne contient les champs de ma table

T'es vraiment un marrant toi :lol:

Oui on a bien compris que cette ligne contient *les noms de colonnes de la table*
Mais en tant que tel ça ne se "rentre pas dans la table" comme on le fait pour les données. Or c'est bien ce que tu as dit vouloir faire dans ton message précédent.
Tu vas me dire que j'aurais pu mettre de la bonne volonté à comprendre mais je t'assure que j'ai essayé. Il se trouve que dans un autre fil de discussion tu as dit que la table existait déjà. S'il elle existe, les colonnes ont déjà un nom. Alors qaund tu dis que dois rentrer les noms de colonnes ça ne veut rien dire. Voilà.

Tu sais, ce n'est pas en balançant des petites phrases comme ça, comme si on ne comprenait rien, que tu vas avancer beaucoup. Allez remets toi en cause un petit peu.
Sinon, t'aider c'est pas possible, et pourtant je ne manque pas de bonne volonté je t'assure.

wiss20000

voici le code complet (tout mache comme sur des roulette)

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;



public class creertab {

	/*  
	 *  @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[][] x =new String[100][100];
		
		 try {
			   FileInputStream ips=new FileInputStream("./EXCHO00.csv");
			   InputStreamReader ipsr=new InputStreamReader(ips);
			   BufferedReader br=new BufferedReader(ipsr);
			   String ligne;
			   int y = 0;
			   
			   while ((ligne=br.readLine())!=null ) {
							   
			    String text = ligne;
			  
		    	x[y]=text.split(",");
			   	    		    
			    for (int i=0;i< (x[y].length-2);i++){
				System.out.println(x[y][i]);
			    }
			  //  System.out.println("nouvelle ligne ");
			    y++;
			    }

			   br.close();
			  }
			  catch (Exception e) {
			   System.out.println(e.toString());
			  } 
			  String URL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/bd1.mdb";
		        String username = "";
		        String password = "";

		        try {
		            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		        } catch (Exception e) {
		            System.out.println("Failed to load JDBC/ODBC driver.");
		            return;
		        }

		        Statement stmt = null;
		        Connection con=null;
		        try {
		            con = DriverManager.getConnection (
		                URL,
		                username,
		                password);
		            stmt = con.createStatement();
		        } catch (Exception e) {
		            System.err.println("problems connecting to "+URL);
		        }
		      
		        try {
		        
		        	stmt.execute("create table test01 ");
                 	for (int z = 0;z <(x[0].length);z++){
		            stmt.execute("Alter table test01 add \""+x[0][z]+"\" varchar(50)");        	
		        	}
		        	 
                   
		        		for (int z = 1;z <(x.length-2);z++){
		        			String cumul=""+"'"+x[z][0]+"'";
		        		  for(int j=1;j<x[z].length;j++){
                               String str = x[z][j];
	                           cumul=cumul+",'"+str+"'"; 
	                     }
		        		 // System.out.println(cumul);
		        		  String s="insert into test01 values ("+cumul+")";
		        		  //System.out.println(s);
                          stmt.execute(s);

		        		
		        	}
		        	con.close();
		        } catch (Exception e) {
		            System.err.println("problems with SQL sent to "+URL+
		                ": "+e.getMessage());
		        }
			  
	}

}
fredericmazue

Bravo :!: :D

Maintenant quelques remarques si tu me le permets.
Bon ça marche mais...

1) c'est vraiment pas beau de créer une table et de faire une boucle pour ajouter des colonnes. Normalement tu crées toutes les colonnes d'un coup avec une seule requête. Pour moult raisons un ajout de colonnes dans une table est quelque chose qui devrait n'être fait qu'exceptionnellement.

2) toutes tes colonnes ont un type varchar(50) même pour les dates, valeurs numériques et autres. C'est pas bien beau non plus.
Et puis tu perds une place folle dans la base

Ton code marche c'est entendu, mais ce que je veux te dire c'est que si tu le montres à un entretien d'embauche, tu vas être recalé à coup sûr.

Je ne te dis pas ça pour te faire de la peine. Comprends moi bien
Je vois que tu as bossé dur pour faire ce que tu as fait. Je te dis ça simplement pour te signaler des améliorations que tu devrais apporter, maintenant que tu as déjà une base de code qui fonctionne.

wiss20000

merci pour ton conseil
je vais esseyer d'améliorer mon code mais je devrais dire que c'est pas mal sur tout que c'est première fois que je développe en java.
:arrow: à propos des colonne je n'est plus le choix car les différents champs sont créer à partir d'un fichier donc je ne sais pas au préalable tout les champs de ma base.

Et merci encore une fois. :D

fredericmazue

Quote:
à propos des colonne je n'est plus le choix car les différents champs sont créer à partir d'un fichier donc je ne sais pas au préalable tout les champs de ma base.

Oui j'avais bien compris,

Mais non :)
De quoi parles tu au fait ? De créer toutes les colonnes d'un coup, ou de connaître VARCHAR dans toutes les colonnes ?
Mais dans tous les cas tu peux procéder autrement.
Pour la question des types tu peux très bien analyser un peu les données pour voir ce que c'est. C'est facile d'identifier les types Double par exemple. Ou encore les dates ou l'heure.

Autre chose pendant que j'y suis.
Tu déclares varchar(50), mais je ne crois pas avoir vu dans ton code que tu vérifies que ce que tu y mets tient dedans ;)

wiss20000

vous avez raison à propos des type de variable :idea:
mais pour les colonnes je disais que j'ai ne plus le choix il faut les insérées une par une :!:

wiss20000

:arrow: juste une proposition: pour quoi ne pas distingué entre les discussions résoluts et celle qui ne sont pas, c'est juste ajouter [résolut] à coté du nom de la discussion :?:

fredericmazue

Quote:
mais pour les colonnes je disais que j'ai ne plus le choix il faut les insérées une par une

Ah non, ah que non :!: :!:

Il te suffit d'analyser (toute petite analyse hein ) la première ligne de ton fichier pour connaître

1) le nombres de colonnes
2) leurs noms

Après quoi rien ne t'empêche de constituer ta chaîne CREATE TABLE,etc
Vraiment très très très, mais alors très facile
m'enfin.....

fredericmazue

Quote:
juste une proposition: pour quoi ne pas distingué entre les discussions résoluts et celle qui ne sont pas, c'est juste ajouter [résolut] à coté du nom de la discussion

Pour commencer je préférerais de loin [Résolu]

Ensuite qui a posé la question :?:
C'est à toi de le faire....

wiss20000

1) le nombres de colonnes
2) leurs noms

Après quoi rien ne t'empêche de constituer ta chaîne CREATE TABLE,etc
Vraiment très très très, mais alors très facile
m'enfin.....
et pour je pouvez avoir une liste de 78 champs
je dois faire koi
create table test (champ1, chaps2,.........,champs78)
:?:

fredericmazue

Quote:
et pour je pouvez avoir une liste de 78 champs

Crévindiou qu'est qu'y a ti dans ton champs ?
Comprends point kek tu dis là mon gars.

Quote:
je dois faire koi

Je suppose que c'est une plaisanterie que je n'ai pas le privilège de pouvoir comprendre.

Dis, sans rire, as tu déjà pensé que quand une personne essaie d'en aider une autre sur un forum, si la seconde ne veut jamais rien entendre, la première finit par se lasser.
Toi qui postes dans tous les forums de l'univers connu et inconnu (ah si, je t'ai vu :!:) tu devrais le savoir non ?

wiss20000

je m'excuse je voulais juste dire que dois je faire
:oops: :oops: :oops: :oops: :oops: :oops: