0

以下は、2つのことを行うコードのブロックです。関数readBCInputDataFromTextFileは、テキストファイルを読み取り、読み取ったデータを文字列配列である変数textData(つまり、String [])に格納します。配列サイズは、int変数を使用して入力されます。 numOfLines(ここでも関数readBCInputDataFromTextFile)。この機能は完全に機能します。

コードが(関数checkBCInputで)行う2番目のこと(現在は機能しません)は、通常の式を使用してデータを分離し、4つの「コンテナー」(すべてベクトル)に格納します:bcStringConstant、bcNameVec、bcTempVec& bcHTCVec。

ここで私の質問は、変数textDataを関数checkBCInputに渡す方法です。両方の関数のコードを1つのJavaファイルに結合すると、コードは実行時に機能します。しかし、物事を機能させるこの方法はあまり良くありません-モジュール化は苦労します。したがって、コードを2つの関数に分割する必要があります。1つはテキストファイルを読み取り、読み取った内容を2つ目の関数に渡します。この関数は、正規表現を使用して、読み取ったデータを特定のコンテナーに格納します。

readBCInputDataFromTextFileからtextDataを返そうとしましたが、実行している現在のシミュレーションでは機能しません。また、読み取ったデータをcheckBCInputに渡そうとしましたが、「シンボルが見つかりません:シンボルtextData」という別のエラーメッセージが表示されます。2番目の方法(以下に太字で示されています)は機能しますが、まだ解決策がわかりません:-/

/*
 * inputReader
 * Last Revision: July 19, 2012.
 */
// package below is specific to software
package macro;

import java.util.*;
import java.text.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

// Imports below are specific to the software
import star.base.neo.*;
import star.base.report.*;
import star.common.*;
import star.energy.*;
import star.flow.*;
import star.keturb.*;
import star.material.*;
import star.meshing.*;
import star.metrics.*;
import star.prismmesher.*;
import star.resurfacer.*;
import star.segregatedenergy.*;
import star.segregatedflow.*;
import star.solidmesher.*;
import star.trimmer.*;
import star.turbulence.*;
import star.vis.*;

// base class (StarMacro) is derived from software 
public class inputReader extends StarMacro {
/*************************************************** 
* 
* Global definitions
* 
***************************************************/
// Print output to screen?
int print_to_screen = 0;

// Variables to store BCs             

int noOfBounds = 0;
String inputBCTextFile = null;

Vector bcStringConstant = new Vector();
Vector bcNameVec = new Vector();
Vector bcTempValVec = new Vector();
Vector bcHTCValVec = new Vector();

public void execute(){
    // does nothing but function is required
}

public void readBCInputDataFromTextFile(String inputBCTextFile){

/*  
* READ INPUT FILE CONTENTS
*/

File dir = new File(System.getProperty("user.dir").toString() + File.separatorChar);  
if(print_to_screen == 0){
    sim.println("Directory where input text file is located: " + dir);
}
else{
    System.out.println("Directory where input text file is located: " + dir);
}

this.inputBCTextFile = inputBCTextFile;

if(print_to_screen == 0){
    sim.println("File name is: " + inputBCTextFile);
}
else{
    System.out.println("File name is: " + inputBCTextFile);
}


BufferedReader bf = null;        

try{
    bf = new BufferedReader(new FileReader(inputBCTextFile));

    if(print_to_screen == 0){
        sim.println("FILE EXISTS!!");
    }
    else{
        System.out.println("FILE EXISTS!!");
    }

}

catch (FileNotFoundException e){

    if(print_to_screen == 0){
        sim.println("FILE NOT FOUND!!!");
    }
    else{
        System.err.println("FILE NOT FOUND!!!");
    }

    e.printStackTrace();
}

int numOfLines = 0;
String aLine;

try{
    while (( aLine = bf.readLine()) != null){
        numOfLines++;
    }
} 
catch (IOException e){
    if(print_to_screen == 0){
        sim.println("FILE NOT READ => NUMBER OF LINES IN FILE SET TO NULL");
    }
    else{
        System.err.println("FILE NOT READ => NUMBER OF LINES IN FILE SET TO NULL");
    }
    e.printStackTrace();

}

try{
    bf.close();
}
catch (IOException e){
    if(print_to_screen == 0){
        sim.println("FILE NOT CLOSED PROPERLY!!!");
    }
    else{
        System.err.println("FILE NOT CLOSED PROPERLY!!!");
    }

    e.printStackTrace();
}
BufferedReader textReader = null;

try{
    textReader = new BufferedReader(new FileReader(inputBCTextFile));
    if(print_to_screen == 0){
        sim.println("READING INPUT DATA FROM TEXT FILE");
    }
    else{
        System.out.println("READING INPUT DATA FROM TEXT FILE");
    }

} 
catch (FileNotFoundException e){
    if(print_to_screen == 0){
        sim.println("FILE NOT FOUND!!!");
    }
    else{
        System.err.println("FILE NOT FOUND!!!");
    }

    e.printStackTrace();
}

String[] textData = new String[numOfLines];

try{
for (int i = 0; i < numOfLines; i++){
    textData[i] = textReader.readLine();
    }
}
catch (IOException e){
    if(print_to_screen == 0){
        sim.println("FILE NOT READ!!!");
    }
    else{
        System.err.println("FILE NOT READ!!");                
    }

    e.printStackTrace();
}

 **checkBCInput(textData);**

try{
    if(print_to_screen == 0){
        sim.println("FILE READ AND CLOSED");
    }
    else{
        System.out.println("FILE READ AND CLOSED");
    }

    textReader.close();
    }
catch (IOException e){
    if(print_to_screen == 0){
        sim.println("FILE NOT CLOSED PROPERLY!!!");
    }
    else{
        System.err.println("FILE NOT CLOSED PROPERLY!!!");
    }

    e.printStackTrace();
   }

 }

public void checkBCInput(String[] textData){
    Pattern inputBCTextFileData = Pattern.compile("(.*)\t(.*)\t-?((\\d+\\.\\d*|\\d*\\.\\d+)|\\d+)\t-?((\\d+\\.\\d*|\\d*\\.\\d+)|\\d+)");

for (int i =0; i < textData.length; i++){
    Matcher inputBCTextFileDataMatcher = inputBCTextFileData.matcher(textData[i]);

    if(inputBCTextFileDataMatcher.find()){
        // 1st match is variable name
            bcStringConstant.add(inputBCTextFileDataMatcher.group(1)); // this is the 1st column in the text file
        bcNameVec.add(inputBCTextFileDataMatcher.group(2));
        bcTempValVec.add(inputBCTextFileDataMatcher.group(4)); // gets numbers in decimal notation
        bcHTCValVec.add(inputBCTextFileDataMatcher.group(6)); // gets numbers in decimal notation
    }
 }

 }  

}

4

1 に答える 1

0

readBCInputDataFromTextFileからtextDataを返そうとしましたが、実行している現在のシミュレーションでは機能しません。

なぜだめですか?このようなものが機能するはずです:

String[] textData = readBCInputDataFromTextFile(...);
checkBCInput(textData);

次に、のリターンタイプをに変更readBCInputDataFromTextFileし、最後にString[]aを追加します。return textData;

于 2012-07-24T17:52:36.560 に答える