Equivalent de fscanf en Java?

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 329
70
45
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 />
 
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 />
 
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.
 
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


laugh.gif
laugh.gif
laugh.gif
laugh.gif