2009-10-29 6 views
0

J'ai écrit une classe Java qui analyse un fichier texte bpel puis retourne le nombre d'occurences de certains mots. Je voulais le convertir à l'application VB2008 Forms, de sorte que ses résultats sont affichés dans un TextBox et non sur la console. Le problème est que VB2008 manque de classes Scanner et StringTokenizer, qui sont dans ma classe Java actuelle. Je ne sais pas comment obtenir la même fonctionnalité (ou mieux) dans VB2008. Quelqu'un peut-il aider à convertir cette classe. Je vous remercie.convertir une classe java en une application vb 2008

La classe Java est la suivante:

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.StringTokenizer; 

public class StringParser 
{ 
private int ctrlFlowStructures; 
private String filePath; 
private ArrayList<String> activities; 
final String[] ctrlFlowsArray={"sequence","if","while","repeatUntil","forEach", "pick","flow"}; 

public StringParser(String path)   
{ 
    filePath=path; 
    ctrlFlowStructures =0; 
    activities=new ArrayList<String>(); 
}  

//count number of occurences of words in ctrlFlowStructureArray 
public int countCtrlFlowStructures() 
{  
    Scanner input=null; 
    StringTokenizer st; 
    String line=null; 
    String openingComment="!--"; 
    String closingComment="--"; 
    int c=0; 

    try 
    { 
     input=new Scanner(new FileInputStream(filePath)); 
    } 

    catch(FileNotFoundException e) 
    { 
     System.out.println("Problem opening files."); 
     System.exit(0); 
    }   

    while(input.hasNextLine()) 
    { 
     line=input.nextLine(); 
     line.trim(); 
     st= new StringTokenizer(line, " <,>\"",false);  
     String temp=null;     
     while (st.hasMoreTokens()) 
     { 
      temp=st.nextToken();    

      //eliminate comments 
      if(temp.equals(openingComment)||temp.equalsIgnoreCase("documentation")) 
      { 
       c=1; 
      } 
      if(temp.equals(closingComment)||temp.equalsIgnoreCase("/documentation")) 
      { 
       c=2; 
      } 
      if(c==0||c==2) 
      {    
       for(int i=0;i< ctrlFlowsArray.length;i++) 
       if(temp.equalsIgnoreCase(ctrlFlowsArray [i])) 
       { 
        ctrlFlowStructures ++;      
       } 
      } 
     } 
    } 
    input.close(); 
    return ctrlFlowStructures; 
} 

//display control flow structures 
public void display() 
{ 
    int openingComment=0; //number of occurrence of an activity 
    for(int i=0;i< ctrlFlowsArray.length;i++) 
    {   
     for (int j=0;j<activities.size();j++) 
     {    
      if(ctrlFlowsArray [i].equalsIgnoreCase(activities.get(j))) 
      { 
       openingComment++; 
      }    
     } 
     if(openingComment>0) 
     { 
      System.out.println(ctrlFlowsArray [i]+" = "+openingComment); 
      openingComment=0; 
     } 
    } 
} 
public static void main(String[] args)  
{ 
    StringParser sp=new StringParser("c:\\MyFile1.bpel"); 
    int a = sp.countCtrlFlowStructures();   
    System.out.println(" The number of control-flow structure(s) = " + a);   
} 
} 

Et voici l'extrait de code du fichier MyFile1.bpel qui a été analysé:

<sequence> 
    <documentation> 
     The sequence includes several activities which are executed in lexical order. 
    </documentation> 

    <receive 
     name="start" 
     partnerLink="MyProcess" 
     operation="operation1" 
     portType="ns1:portType1" 
     variable="inputVar" 
     createInstance="yes"> 

     <documentation> 
      The Receive activity makes the process to wait for the incoming message to arrive. 
     </documentation> 
    </receive> 

    <assign name="Assign1"> 
     <documentation> 
      The Assign activity copies data from the input variable to the output variable. 
     </documentation> 

     <copy> 
      <from>$inputVar.inputType/ns2:paramA</from> 
      <to>$outputVar.resultType/ns2:paramA</to> 
     </copy> 
    </assign> 

    <reply 
     name="end" 
     partnerLink="MyProcess" 
     operation="operation1" 
     portType="ns1:portType1" 
     variable="outputVar"> 

     <documentation> 
      The Reply activity returns a message from the process to the partner which initiated the communication. 
     </documentation> 
    </reply> 
</sequence> 

Résultat:

The number of control-flow structure(s) = 1. 

Répondre

1

Vous pouvez utiliser String.Split au lieu de StringTokenizer. Pour votre utilisation de Scanner, System.IO.StreamReader devrait être un remplacement approprié. Etant donné que ce que vous analysez ressemble à un fichier XML, vous pouvez envisager d'utiliser les fonctions d'analyse XML de .NET au lieu des opérations de chaîne.

+0

Merci Heinzi, J'ai essayé StreamReader & Split, mais je reçois des résultats incorrects. Je veux diviser le fichier, puis compter les occurrences de "séquence". Une idée de comment le faire? Voir mon code: Dim s As String = txtOpen.Text Dim arr As String() = PARTAGE (" ") Dim searchTerm As String =" " Pour chaque s Dans arr txtSplit.Multiline = True txtSplit.Lines = arr suivant Dim matchQuery = De mot Dans arr Où word.ToLowerInvariant() = searchTerm.ToLowerInvariant() Sélectionner un mot compte Dim As Integer = matchQuery.Count() txtWordOccurences.Multiline = True txtWordOccurences.Text = count.ToString() – user198934

+0

Je n'ai pas de compilateur VB avec moi maintenant donc je ne peux pas tester votre code, mais voici ce que j'ai remarqué: Essayez d'utiliser s.Split (Nothing) au lieu de s.Split ("") , de sorte qu'il se divise sur * tout * wh itespace charaters. PS. Votre boucle "For Each s" n'a pas de sens - vous n'utilisez pas "s"! – Heinzi