• Bonjour Visiteur. Bienvenue sur les nouveaux forums de MacGeneration. La peinture est encore fraiche, quelques boulons doivent être resserrés, plus d’informations demain !

Equivalent de fscanf en Java?

SuperCed

Membre d’élite
Club MacG
20 Juin 2001
1 167
49
40
superced.rb38.eu
Tout est dans le titre, je recherche un équivalent de fscanf en Java.
Pour rappel, voici l'utilité de fscanf en C:


<font class="small">Code:</font><hr /><pre>


FILE *fp;
   char msg[512];
   int nb,i,dontCare,j;
   fp = fopen(path, "rt");
   if (!fp) return 1;
   strcpy(msg,"");
   while (strcmp(msg,"Mesh")) {
       nb = fscanf(fp,"%s\n",msg);
       if (nb!=1) return 2;
   }
   nb = fscanf(fp,"%s\n",msg);
   if (nb!=1) return 2;
   nb = fscanf(fp,"%s\n",msg);
   if (nb!=1) return 2;
   nb = fscanf(fp,"%d;\n",&amp;(data-&gt;nbVertices));
   if (nb!=1) return 2;
   data-&gt;verticesList = (vertexData*)malloc(data-&gt;nbVertices*sizeof(vertexData));
   if (!data-&gt;verticesList) return 3;
   for (i=0;i&lt;data-&gt;nbVertices-1;i++) {
       nb = fscanf(fp,"%f;%f;%f;,\n", &amp;(data-&gt;verticesList.x), &amp;(data-&gt;verticesList.y), &amp;(data-&gt;verticesList.z));
       if (nb!=3) return 2;
   }
...

</pre><hr />
 

SuperCed

Membre d’élite
Club MacG
20 Juin 2001
1 167
49
40
superced.rb38.eu
Je me réponds à moi même pour vous montrer qu'il faut à peu près 10 fonctions an java pour remplacer le fscanf du langage C :

<font class="small">Code:</font><hr /><pre>
try {
FileReader fileIn = new FileReader(path);
BufferedReader in = new BufferedReader(fileIn);
LineNumberReader stream3 = new LineNumberReader(in);
String line;
line = stream3.readLine();
System.out.println (line);
System.out.println ("test1");
while (line.lastIndexOf("Mesh") == -1) {
line = stream3.readLine();
System.out.println (line);
}
line = stream3.readLine();
System.out.println (line);
StringTokenizer st = new StringTokenizer(line);
String temp = new String(st.nextToken());
nbVertices = Integer.parseInt(temp.substring(0, temp.length()-1));
System.out.println (nbVertices);
}
catch (IOException e) {
System.out.println (e);
}
</pre><hr />
 

antmuc

Membre confirmé
28 Novembre 2003
135
2
42
Munich
En effet, la fonction fscanf n'existe pas en Java (tout comme la fonction scanf et pas mal de fonctions semblables...)

Cela dit une des étapes de ton code me semble inutile. La commande "readLine" est disponible dans la classe BufferedReader, tu n'as donc pas besoin de créer un LineNumberReader.
Si tu tiens à utiliser la classe LineNumberReader, tu peux l'instancier directement à partir du FileReader. Dans tous les cas une étape est de trop.
 

plumber

Membre confirmé
15 Janvier 2003
473
0
je rappel qu'il existe les jni java native interface

quand j'ai besoin de fonctions manquante je fais une lib

ou alors tu peux ecrire un class ou une interface
fscanf