2016-05-31 3 views
0

У меня есть ниже Requirment:Разделенные файлы на основе содержимого файла и сопоставления с образцом в Java

Rate: GBP 
12/01/1999,90.5911501,Validated 
..... 
..... 
18/01/1999,90.954996,Validated 
Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 
Rate: USD 
21/11/11,-0.004419534,Validated 
Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 
Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 
Rate: GBP 
12/01/1999,90.5911501,Validated 
..... 
..... 
Rate: GBP 
12/01/1999,90.5911501,Validated 
..... 
..... 
Rate: USD 
21/11/11,-0.004419534,Validated 

Здесь у меня есть 3 «Оценить: RMB» линии и детали этих недо следующая строка «Rate». Мой Requirment, чтобы разбить этот файл на основе «Rate: ПКМ» и создать выходные файлы с «Rate:. Юаней и его детали выход будет, как показано ниже:

Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 
Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 
Rate: RMB 
24/04/2008,132.2542,Validated 
..... 
25/04/2008,132.2279,Validated 
28/04/2008,131.69915,Validated 

Я попытался с Java, но не в состоянии получить требуемую мощность

Мой код:.

public static void main(String[] args) throws IOException 
{ 

    FileInputStream fis = new FileInputStream("C:\\Users\\User\\Desktop\\SplitFile\\InputTest.txt"); 

    BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 
    // System.out.println("11111"); 
    String s = ""; 
    String rate = "RMB"; 
    StringBuilder sb = new StringBuilder(); 
    int count = 1; 
    // s=br.readLine(); 
    while ((s = br.readLine()) != null) 
    { 
     if (s.contains("Rate") && s.substring(6, 9).equals(rate)) 
     { 

      if (sb.length() != 0) 
      { 
       System.out.println(count); 
       File file = new File("C:\\Users\\User\\Desktop\\SplitFile\\" + rate + "_" + count + ".txt"); 
       PrintWriter writer = new PrintWriter(file, "UTF-8"); 
       writer.println(sb.toString()); 
       writer.close(); 
       sb.delete(0, sb.length()); 
       count++; 
      } 
      continue; 
      // System.out.println(name); 
      // call read file 

     } 
     sb.append(s + "\n"); 
     System.out.println(sb); 
     // s=br.readLine(); 
    } 

    br.close(); 
} 
+1

«но не может получить требуемый результат». Какой выход вы получаете? –

+0

Я получаю три разных файла с именем RMB_1, RMB_2, RMB_3 со всеми подробностями, даже с деталями «Rate: GBP» ... – ramansingh

ответ

0

Я предполагаю, что вы хотите создать новый файл каждый раз, когда линия Rate: RMB показывает вверх и все выводится внизу, чтобы этот файл, этот код должен делать трюк для вас:

public static void main(String[] args) throws Exception 
{ 
    //get desktop location 
    String location = System.getenv("USERPROFILE") + "\\Desktop\\SplitFile\\"; 

    String regex = "^Rate..RMB"; 

    //get input file 
    FileInputStream inputfile = new FileInputStream(location + "InputTest.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(inputfile)); 

    int count = 0; 
    String in = br.readLine(); 

    //if the file starts with the pattern, skip the first line 
    if(Pattern.matches(regex, in)) 
     br.readLine(); 

    //create first output file 
    File outfile = new File(location + "OutputFile_" + count + ".txt"); 
    PrintWriter pw = new PrintWriter(outfile); 

    while(in != null) 
    { 
     //if pattern matches start a new file 
     if(Pattern.matches(regex, in)) 
     { 
      //close previous output 
      pw.flush(); 
      pw.close(); 

      //create new output file 
      outfile = new File(location + "OutputFile_" + count + ".txt"); 
      pw = new PrintWriter(outfile); 

      count++; 
      in = br.readLine(); 
      continue; 
     } 

     //print to file 
     pw.println(in); 

     in = br.readLine(); 
    } 

    //close final output 
    pw.flush(); 
    pw.close(); 

    //close input 
    br.close(); 
} 
+0

Hi Gelunox, Спасибо за ваш отзыв ... Но этот код застрял в бесконечном loop и создает 0 байтовых файлов. – ramansingh

+0

Hi Gelunox, Теперь он создает 3 файла, но содержит подробные сведения о другой тарифной ставке и файл пропускает Rate: GBP header в каждом файле. – ramansingh

Смежные вопросы