-3

次の内容の「text1」という名前の 2 つのテキスト ファイルがあります。

1191196800.681 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
1191196800.683 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
1191196800.685 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D 

および次の内容の「text2」

1191196800.682 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
1191196800.684 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
1191196800.686 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D 

次の内容で次の内容のソートされた 3 番目のファイルを作成したい

 1191196800.681 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
 1191196800.682 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
 1191196800.683 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
 1191196800.684 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D
 1191196800.685 - !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D

上記の問題を解決するための疑似コードを提供するのを手伝ってくれる人はいますか。前もって感謝します。

4

6 に答える 6

3

UNIX マシンの場合:

sort -n -k1 file1 file2 > results.txt
于 2012-06-03T18:53:13.173 に答える
2

ファイルをリストに読み込み、次を呼び出します。

Collections.sort(yourList);

次に、ソートされたリストを繰り返し処理し、コンテンツをファイルに書き込みます。

読み取りファイルの例: http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml 書き込みファイルの例: http://www.roseindia.net/java/beginners/java -ファイルへの書き込み.shtml

于 2012-06-03T19:01:20.633 に答える
2

これを試して。

  1. file1 から読み取って一時ファイルに保存し、次に file2 を読み取って同じ一時ファイルに保存します。

  2. ここで Scanner (つまりnext()) を使用してこの一時ファイルを読み取り、 next() のみを使用します。これにより、すべての行の最初の単語のみが読み取られ、これを使用して double に変換され、行全体がas 文字列Double.parseDouble()にドロップされます。TreeSet()

  3. TreeSet() の内容を file3 に書き込みます。

  4. 最終結果はあなたが望むものになります。

これが役立つと思っただけで、読んで追加する方法も示しています。

ファイルから読み取る場合

File f = new File("my.txt");
FileReader fr = new FileReader(f);
BufferedReader br  = new BufferedReader(fr);

String s = null;

while ((br=readLine())!=null) {

// Do whatever u want to do with the content of the file,eg print it on console using SysOut...etc

}

br.close();

ファイルへの書き込みの場合:

Boolean isDone = true;
Scanner scan = new Scanner(System.in);
File f = new File("my.txt");
FileWriter fr = new FileWriter(f,true);
BufferedWriter br  = new BufferedWriter(fr);

while (b) {

   if (!b) {

 br.append(new Scanner(System.in).nextLine());

 }


}
于 2012-06-03T19:02:11.367 に答える
1

次のように 2 つのファイルを読み取り、ハッシュ マップに保存します。

HashMap<Double,String> hash=new Hashmap<Double,String> ();

Double は最初の部分 Double(1191196800.681)、String(- !AIVDM,1,1,,,13aG?N0rh20E6sjN1J=9d4<00000,0*1D)

 Map<String, String> sortedMap = new TreeMap<String, String>(hash);


out.println(sortedMap);
于 2012-06-03T18:59:39.917 に答える
1

上記の作業を行う簡単なプログラムを次に示します。

public class RunSysCmd {

/**Executes the Linux command necessary for sorting
 * @param String
 */
public static void main(String[] args) {

    try {
        // command to be executed
        String cmd = "/usr/bin/sort -n -k1 /home/General_DataStructure/r1.nmea /home/General_DataStructure/r2.nmea";

        // new file where the result will be stored
        BufferedWriter out = new BufferedWriter(new FileWriter(new File("/home/General_DataStructure/r3.nmea")));
        String line;

        // run the command specified in the cmd variable
        final Process process = Runtime.getRuntime().exec(cmd);

        // read the result executed by the previous command
        BufferedReader buf = new BufferedReader(new InputStreamReader(process.getInputStream()));

        // write the output of the command to new file
        while ((line = buf.readLine())!=null) {
            out.write(line);
            out.newLine();

        }

        // close the file
        buf.close();
        out.close();

        // causes the thread to wait until the process represented by this Process object the is terminated
        process.waitFor();

        // get the return value of the process. The value 0 means successful execution of the thread
        int returnCode = process.exitValue();
        System.out.println(returnCode);

    } catch (IOException e) {
        e.printStackTrace();

    }

    catch (InterruptedException e) {
        e.printStackTrace();

    }

  }// main ends here
 }

ありがとう

于 2012-06-04T09:30:08.380 に答える
1

未検証:

BufferedReader reader1 = new BufferedReader(new FileReader("file1.txt"));
BufferedReader reader2 = new BufferedReader(new FileReader("file2.txt"));
PrintWriter out = new PrintWriter ("out.txt");

String line1 = reader1.readLine();
String line2 = reader2.readLine();

while(line1 !=null && line2 != null) {
  out.println(line1);
  out.println(line2);
  line1 = reader1.readLine();
  line2 = reader2.readLine();
}
于 2012-06-03T18:51:43.937 に答える