Découper champs java

Résolu/Fermé
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 - 9 janv. 2009 à 19:36
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 - 30 janv. 2009 à 00:56
Bonjour,

voilà, j'ai fait plusieurs recherche sur le net mais je n'arrive pas à trouver mon bonheur...

J'aimerai trouver une fonction java qui me permettrai de fractionner les lignes d'un fichier ISO qui sera ensuite réinjecté dans une BDD MySQL...

Merci pour votre aide

Titfofol
A voir également:

22 réponses

titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
9 janv. 2009 à 20:43
Non mais s'il vous plait aider moi...

Je pense qu'il faut utiliser un StringTokenizer non ?! je n'ai pas encore bien saisie sa notion... a quoi il sert réellement

Titfofol
0
Utilisateur anonyme
11 janv. 2009 à 02:32
Bonjour,

Il nous faudrait au minimum que tu nous donnes la "structure de la ligne".

L'idée de StringTokenizer est bonne, mais il faut comment on veut éclater la ligne:

exemple:

Si la ligne est de ce type : "mot1 mot2 mot3 mot4";

.......
import java.util.*;
.........

StringTokenizer ligne;

ligne = new StringTokenizer ("mot1 mot2 mot3 mot4");

while (ligne.hasMoreTokens())
System.out.println(ligne.nextToken());

Cordialement,

Dan.
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
14 janv. 2009 à 17:51
salut danimo,

voila en fait j'ai un fichier en .iso qui représente une mise a jour de ma base de données. comme dans ce fichier il y a des lignes de produit j'aimerai les mettre dans ma bdd.

la forme des ligne sont :

"000001|0000010001|3393767|ALLO..."

les points de suspension c'est parce qu'il y a beaucoup d'autres champs derrière...

chaque ligne du fichier représente une nouvelle ligne d'enregistrement

merci de m'aider...

titfofol
0
Utilisateur anonyme
14 janv. 2009 à 19:25
Salut,

Pour extraire chaque champ avec donc le "séparateur" | :

Dans cet exemple, j'affiche les champs dans une ou plusieurs boÎtes de dialogue pouvant contenir chacune au maximum 20 champs (il n'y a pas de "scroll" dans les boÎtes de dialogue.)


// import java.util.*; // Token

// Pour portabilite ne pas utiliser \n
String nL1 = System.getProperty("line.separator");
String nL2 = nL1 + nL1;


String laLigne = "01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|FIN|";
String info = "LE RÉSULTAT:" + nL2;

StringTokenizer unChamp;

unChamp = new StringTokenizer(laLigne, "|"); // le "séparateur" est |

while (unChamp.hasMoreTokens())
{
max++;
if (max > 20)
{
max = 1;
javax.swing.JOptionPane.showMessageDialog(null,info + nL2 + "IL Y A UNE SUITE...");
info = "LA SUITE DU RÉSULTAT:" + nL2;
}
info+= unChamp.nextToken() + nL1;
}
javax.swing.JOptionPane.showMessageDialog(null,info + nL1 + "FIN DE L'EXTRACTION.");

Cordialement,

Dan
0

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

Posez votre question
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
14 janv. 2009 à 20:03
*Et si par exemple je doit l'enregistrer dans un arraylist je devrait faire comme ça?! :

StringTokenizer Tok = new StringTokenizer(Mot,"| ");
ArrayList Liste = new ArrayList();
while(Tok.hasMoreTokens( )){
	Liste.add(Tok.nextToken());
}


cordialement

Titfofol
0
Utilisateur anonyme
14 janv. 2009 à 20:15
StringTokenizer Tok = new StringTokenizer(Mot,"| ");

non;

StringTokenizer Mot = new StringTokenizer(taLigne,"| "); // mot plutot que Mot pour respecter les conventions
0
Utilisateur anonyme
14 janv. 2009 à 20:19
parceque c'est "taLigne" que tu veux découper en plusieurs "Mot"
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
14 janv. 2009 à 20:51
non oups j'ai oublié une ligne:

public static void Traitement(String Mot){
	StringTokenizer Tok = new StringTokenizer(Mot,"| ");
	ArrayList Liste = new ArrayList();
	while(Tok.hasMoreTokens( ))
	{
		Liste.add(Tok.nextToken());
		//System.out.println(Tok.nextToken());
	}
}


Bha non c'est pas Mot que je veux découpé bon tu me dira peut etre que je l'ai mal nommé mais bon, c'est Mot que je veux découper en plusieurs mot non?!

donc pour etre plus claire je devrais renommer mer var ce qui donnera :

public static void Traitement(String Ligne){
	StringTokenizer Mot = new StringTokenizer(Ligne,"| ");
	ArrayList Liste = new ArrayList();
	while(Mot.hasMoreTokens( ))
	{
		Liste.add(Mot.nextToken());
		//System.out.println(Mot.nextToken());
	}
}


cordialement

Titfofol
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
14 janv. 2009 à 20:53
c'est comme ça que je devrais faire?

Titfofol
0
Utilisateur anonyme
14 janv. 2009 à 22:25
Oui,

C'est la ligne que tu découpes >>>> new StringTokenizer(Ligne,"| ");
pour obtenir un ou plusieurs "Mot"

si ta méthode Traitement est dans ton programme :

public static void Traitement(){
StringTokenizer Mot = new StringTokenizer(Ligne,"| ");
ArrayList Liste = new ArrayList();
while(Mot.hasMoreTokens( ))
{
Liste.add(Mot.nextToken());
//System.out.println(Mot.nextToken());
}
}

et tu l'appeles comme ceci:

Traitement();

Cordialement,

Dan
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
14 janv. 2009 à 22:32
a bon o_o

normalement je ne devrais pas mettre dans les parenthèse quelque chose pour renseigner ma variable Ligne?!

comme Traitement(fichier);

cordialement

Titfofol
0
Utilisateur anonyme
14 janv. 2009 à 22:53
Non Ligne est connue par la méthode il est donc inutile de passer (Ligne)

Un petit problème quand même, il faut écrire:

Liste.add(Mot);
et non
Liste.add(Mot.nextToken()); sinon tu auras un mot sur 2.
0
Utilisateur anonyme
14 janv. 2009 à 23:05
Une autre remarque:

Il faut bien entendu que Traitement() soit appelée après l'obtention de Ligne.
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
15 janv. 2009 à 00:00
oui, oui

en fait voila, j'ai une autre procédure qui est lecture est en fait', c'est elle qui ouvre le fichier, ou la Ligne sera stocké.

Le fichier sera lu dans la procédure lecture, puis enregistré dans un arraylist donc...

A mais non maic j'ai oublié une ETAPE!! pff

alors attends, voilà lorsque j'appelle Traitement, je l'appelle avec une ArrayList c'est mieux peut etre...

Alors faudra que je découpe...

Au la la, ça devient tout confus dans ma tête, à force que je réfléchisse...

tu veux bien m'aider?! pour que ce ne soit plus confus?

cordialement

Titfofol
0
Utilisateur anonyme
15 janv. 2009 à 00:17
Ok, on respire bien fort...

Bien entendu que je veuxbien t'aider!

tu dis:

"en fait voila, j'ai une autre procédure qui est lecture est en fait', c'est elle qui ouvre le fichier, ou la Ligne sera stocké. "

Bien, à partir de là, tu appèles la methode Traitement comme ceci:

Traitement();
et tu exploites ce que tu as stocké dans Liste.
........
.........

Tu as donc quelque part la methode

public static void Traitement()
{
StringTokenizer Mot = new StringTokenizer(Ligne,"|");
ArrayList Liste = new ArrayList();
while(Mot.hasMoreTokens( ))
{
Liste.add(Mot);
}
}
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
15 janv. 2009 à 00:27
Oui,

mais voilà, je me pose plusieurs questions, notament, lorsque j'appelle Traitement c'est mieu de faire passer en paramètre un ArrayList qu'un String non?! ça veux dire qu'il faudrait que j'extrait une ligne de l'arraylist et que je la stock dans une variable de type string. et là je met le code qui est inscrit plus haut c'est ca?!

au fait' voila mon code pour Lecture

public class LectureFichier {
	public static void main(String[] args) {
		//Initialise les variables Chaine et Fichier
		ArrayList Chaine = new ArrayList();
		String Fichier = "T00.ISO";

		//lecture du fichier texte
		try{
		//Ouvre le fichier T00.ISO
		InputStream Ips = new FileInputStream(Fichier);
		//Lit le fichier en séquence
		InputStreamReader Ipsr = new InputStreamReader(Ips);
		BufferedReader Br = new BufferedReader(Ipsr);
		String Ligne;
		while ((Ligne = Br.readLine()) != null){
			System.out.println(Ligne);
			//Chaine += Ligne + "\n";
			Chaine.add(Ligne);

		}
		Br.close();
		}
		catch (Exception e){
			System.out.println(e.toString());
		}
	}
}


alors si je fais avec un ArrayList j'appelle Traitement avant la ligne Br.close();
et si j'appelle avec un String la je suis obligé de faire tout un truc avant...

En plus il faudra que j'utilise une boucle si c'est avec un String

Cordialement Titfofol
0
Utilisateur anonyme
15 janv. 2009 à 00:52
Oui puisque tu vas obtenir toutes les lignes .
Et effectivement avant de découper chaque ligne tu la mets dans un String. mais je suppose que mettre les mots extraits dans une autre ArrayList n'est pas nécessaire (pas nécessaire mais pourquoi pas!), tu peux peut-être traiter chaque mot et boucler au tok suivant et quand la liigne est totalement éclatée boucler sur la ligne suivante (donc il te faut une double boucle).

Je vais modifier mon exemple et te le soumettre, mais il faut que je l'écrive et le teste.
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
15 janv. 2009 à 01:10
attend

j'ai fait plusieurs procédure parce qu'en fait, il faut essayer de les faire aussi si souple que possible pour pouvoir éventuellement les réutiliser dans différents programmes...

normalement après à la fin je devrais avoir trois class une LectureFichier, TraitementFichier et EnregistrementFichier.

A la fin les lignes de code devront être enregistré dans une base de données.

a vrai dire je ne m'y connais pas trop en java mais bon, j'essaye de me débrouiller... ;))

cordialement titfofol
0
titfofol Messages postés 172 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 14 décembre 2010 9
15 janv. 2009 à 01:58
bon c'est bientot l'heure pour moi, je vais bientôt aller ma journée se termine pour aujourd'hui

A demain et bonne soirée

Titfofol
0
Utilisateur anonyme
15 janv. 2009 à 07:13
Bonjour,

Dans l'exemple suivant, tout est dans ce code, il n'y a pas de classes externes:

import java.util.*; // Token
public class EclaterLignes
{
// Pour portabilité ne pas utiliser \n
static String nL1 = System.getProperty("line.separator");
static String nL2 = nL1 + nL1;

// simulation de 3 lignes lues:
static String ligne1 = "01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|";
static String ligne2 = "26|27|28|29|30|31|32|33|34|35|36|";
static String ligne3 = "37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|FIN|";
static String ligne = "";
//static ArrayList listeM = new ArrayList(); // il n'y a plus de listeM
static ArrayList listeL = new ArrayList();
static int capaciteL;

public static void Traitement()
{
for (int i = 0; i < capaciteL; i++)
{
ligne = "" + listeL.get(i);
System.out.println(nL1 + "Les mots de la ligne" + (i+1) + ":");
StringTokenizer mot = new StringTokenizer(ligne,"|");
while(mot.hasMoreTokens( ))
{
// ici traitement du mot obtenu
System.out.println("On traite le mot " + mot.nextToken());
// peut-etre en appelant une méthode traitementMot();
}
}
}

public static void main (String[] args)
{
// simulation des 3 lignes lues:
listeL.add(ligne1);
listeL.add(ligne2);
listeL.add(ligne3);

capaciteL = listeL.size();
System.out.println(nL1 + ">>>>>>>>>>>>>>>>> nombre de lignes = " + capaciteL + nL2);
Traitement();
}
}

Cordialement,

Dan
0