IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Lire jusqu'à un motif précis


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Lire jusqu'à un motif précis
    Bonjour,

    Voici une partie mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    try 
    				{
    					String ligneComplet = null;
    					int nbrsMatcher = 0;
     
    					for(int i=0 ; i<11 ; i++)
    						{
    							line = buff.readLine() ;
    							Pattern pattern = Pattern.compile("(.*?)=");
    							Matcher matcherLine = pattern.matcher(line);
     
    							while(matcherLine.find())
    							{
    								ligneComplet = ligneComplet + matcherLine.group();
    								nbrsMatcher++;
    							}	
    						}
     
    					/*
    					 * TANT QUE tag trouvés
    					 */
    					String str[]=ligneComplet.split("\0\0\0");
     
    					for(int j = 0; j<=nbrsMatcher+1; j++)
    					{
    						System.out.println(str[j]);
    					}
    Voici ce qu'il me retourne :
    ARTIST=Sampler Jazz
    TITLE=Three Of A Kind - Panacea
    ALBUM=Back to Basics ! - Vol. 2
    DATE=1996
    TRACKNUMBER=
    .
    .
    .
    etc...

    Quelle méthode utiliser pour lire chacune des lignes du tableau str jusqu'au "=" et stocker la première partie dans un tableau et la deuxième partie dans un autre tableau ?

    Il faudrait que j'arrive a stocker ce que je lis dans une variable tant qu'on ne lit pas de "="

    Je ne demande pas forcement le code fait. Mais la methode que vous me conseillez

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il serait bien plus simple de faire un split() sur le =

    line.split("=", 2) va te donner un tableau de deux Strings : avant et après le =
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok je vais essayer, merci pour ta réponse rapide

  4. #4
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
    							line = buff.readLine() ;
    							Pattern pattern = Pattern.compile("(.*?)=");
    							Matcher matcherLine = pattern.matcher(line);
     
    							while(matcherLine.find())
    							{
    								ligneComplet = ligneComplet + matcherLine.group();
    								nbrsMatcher++;
    							}
    						}
     
    						String tab[]=ligneComplet.split("\0\0\0",20);
     
    						for(int i=0; i<=nbrsMatcher+1; i++)
    						{
    							System.out.println(tab[i]);
    							//str[] = tab[i].split("=",2);<==Problème here. "str cannot be resolved to a type"
    						}
    Le souci c'est que je suis dans sur fichier .flac(donc full caractères spéciaux), du coup je dois d'abord trouver les chaines "TAG=Values" ce qu'y est fait.
    Je voudrais pouvoir reprendre ce que j'ai dans tab[](les chaines trouvées juste avant) et le split à nouveau...
    C'est possible ?
    Je sais pas trop ce que veux dire l'erreur qu'il affiche

    Mon fichier text ressemble à ca :
    [NUL][NUL][NUL]nom1=valeur1[caractère spécial][NUL][NUL][NUL]nom2=valeur2[caractère spécial][NUL][NUL][NUL]...etc...

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Houlà. Si c'est un fichier binaire il vaut mieux le parcourir en binaire. Après tout rien ne te protège d'avoir des "=" et des "\0" au milieu des données audio. C'est plutôt le contraire qui serait étonnant.

    Oublie ton idée de "motif" et de "Reader" et fais un vrai système de lecture de fichier FLAC binaire - en ne t'intéressant quand même qu'aux métadonnées, ce qui est facile.
    Pour ça tu auras déjà besoin d'un RandomAccessFile qui te permette de faire seek() pour passer d'un METADATA_BLOCK à l'autre, jusqu'à tomber sur celui de type METADATA_BLOCK_VORBIS_COMMENT.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Oula alors je connais pas du tout ! Je vais me renseigner et j'essaye cette methode !
    Merci thelvin pour le conseil

  7. #7
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    En lisant votre FAQ j'ai trouvé la class FlacTagger qui semblent lire tous les tag...
    Par contre je n'arrive pas a l'import :/ .Ca doit être bête mais je bug là (je suis en train d'apprendre le JAVA d'où mes lacunes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    package pck;
    import java.io.*;
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) 
    	{
    		// TODO Auto-generated method stub
     
    		FlacTagger flactag = new FlacTagger("D:\\Dossier d'attente d'extraction\\01 Three Of A Kind - Panacea.flac");
    	}
     
    }

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je ne sais pas exactement où dans les FAQ tu as trouvé ça, mais si cette classe est fournie, il faut que tu l'ajoute à ton projet pour pouvoir faire l'import. Tu ne peux importer que des classe présentes dans ton projet, soit parce que tu les a écrites, soit parce qu'elle font partie de la java en base, soit parce qu'elle sont dans une librairie supplémentaire que tu as ajoutée à ton projet.

  9. #9
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ici : http://cyber-sinh.developpez.com/tut...et-flac/#LII-A

    Et j'ai ajouter la librérie jaudiotagger mais je n'ai pas FlacTagger comme dans la FAQ :/
    Par contre j'ai : FlacTagReader. Je vais voir ce que je peux faire avec cette méthode... Dommage que je trouve pas la class FlacTagger

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je ne vosi flactagger mentionné nulle part dans cette doc, et ce tutoriel que tu montre, est un tutoriel pour .net, pas pour java.

  11. #11
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok désolé pour l'inattention de ma part tchize_

    Thelvin j'ai du mal a comprendre seek() :/. Tu aurais un exemple sous la main pour l'utilisation que je veux en faire ?

    Car pour moi seek() est un pointer depuis le début du fichier (je sais pas si je m'exprime bien). Je comprend pas quand tu dis "pour passer d'un METADATA_BLOCK à l'autre" dsl si ca parait évident

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Vince1810 Voir le message
    Car pour moi seek() est un pointer depuis le début du fichier (je sais pas si je m'exprime bien).
    Plus exactement il déplace le pointeur jusqu'à l'endroit demandé, par rapport au début du fichier.

    Citation Envoyé par Vince1810 Voir le message
    Je comprend pas quand tu dis "pour passer d'un METADATA_BLOCK à l'autre" dsl si ca parait évident
    Eh bien, lorsque tu es au début d'un bloc, tu peux lire sa taille et son type. Si le type n'est pas celui que tu cherches, tu veux passer au bloc suivant. Et le bloc suivant se trouve après le bloc où tu es, donc, si sa taille est N, le bloc suivant est à <là où tu es> + N. Pour y aller, le plus simple est un seek().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Candidat au Club
    Homme Profil pro
    BTS IRIS
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : BTS IRIS

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Eh bien, lorsque tu es au début d'un bloc, tu peux lire sa taille et son type.
    Quelle méthode utilises-tu pour cela ?

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Eh bien... Le format indique qu'un bloc commence par un octet qui indique son type, suivi de 3 octets qui indiquent sa taille, en big-endian.
    Le plus simple serait un readInt(), qui lit 4 octets, et qu'on retraitera derrière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int blockHeader = ras.readInt();
    int blockType = (blockHeader >> 24) & 0x7F; // keep 8 first bits, then discard the first one and keep seven.
    int blockLength = blockHeader & 0xFFFFFF; // discard first byte, keep three.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Restore d'anciens backups jusqu'à un Timestamp précis
    Par Fabby dans le forum Recovery Manager
    Réponses: 2
    Dernier message: 11/02/2010, 16h49
  2. Réponses: 5
    Dernier message: 14/11/2008, 16h04
  3. Réponses: 7
    Dernier message: 12/10/2007, 18h05
  4. Comment lire jusqu'au caractère CTRL-D EOF ?
    Par AsmCode dans le forum C
    Réponses: 9
    Dernier message: 08/02/2007, 21h27
  5. Réponses: 2
    Dernier message: 29/01/2007, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo