2015-06-12 3 views
0

Вход:В то время как добавление в файл, если условие всегда терпит неудачу

bank_details 
payee 
online_system_id 
transaction_id 
pass_num 
prev_tran_approved 

bank_details 
payee 
online_system_id 
transaction_id 
prev_tran_approved 

Фактический выход ниже кода.

bank_details 
payee 
online_system_id 
transaction_id 
pass_num 
prev_tran_approved 
online_system_id 
proc_online_system_id 
tran_reversed 
prev_tran_approved 

bank_details 
payee 
online_system_id 
transaction_id 
prev_tran_approved 
online_system_id 
proc_online_system_id 
tran_reversed 
prev_tran_approved 

Ожидаемый результат:

bank_details 
payee 
online_system_id 
transaction_id 
pass_num 
prev_tran_approved 
proc_online_system_id 
tran_reversed 

bank_details 
payee 
online_system_id 
transaction_id 
prev_tran_approved 
proc_online_system_id 
tran_reversed 

Приведенный ниже код для справки. Если условия, в которых я проверяю существующую строку в файле, всегда сохраняются, даже если строка не присутствует в файле. Зайдите в код и предложите мне изменения.

Ну, логика заключается в том, что мы должны прочитать файл, который содержит различные строки, где каждая запись разделяется пустой строкой. В зависимости от условий, которые я упомянул в блоке if, т.е. если строка online_system_id уже присутствует в файл, мы не добавим его, а если его нет, мы добавим его в конце каждого блока записи. Эта проверка должна быть выполнена в течение 4 значения, т.е. online_system_id, proc_online_system_id, tran_reversed, prev_tran_approved

String line; 
    File output = new File(outputDir, "post_tran.tbl"); 
    PrintStream out = new PrintStream(new FileOutputStream(output)); 

    BufferedReader br = new BufferedReader(new FileReader(inputFile)); 
    while((line=br.readLine())!=null){ 
     if(line.trim().isEmpty()) { 
      if(!(line.contains("online_system_id"))){ 
       out.println("online_system_id"); 
      } 
      if(!(line.contains("proc_online_system_id"))){ 
       out.println("proc_online_system_id"); 
      }  
      if(!(line.contains("tran_reversed"))){ 
       out.println("tran_reversed"); 
      } 
      if(!(line.contains("prev_tran_approved"))){ 
       out.println("prev_tran_approved"); 
      } 
     } 
     out2.println(line);  //always print the current line 
     } 


     try{ 
     out2.close(); 
     br.close(); 
     } catch (Exception ex) { 
     System.err.println(ex); 
     } 
+0

вывесить фактический вывод, пожалуйста –

+0

Arthur Я отправляю – user3678383

ответ

4

EDIT:

После объяснения вашей логики, это выглядит, как вам нужно следить, какие из 4 специальных струнных появился в текущей записи и добавил, какой бы ни был из них, когда запись заканчивается. Вы можете сделать это с помощью 4 булевых переменных.

boolean osi = false; 
boolean posi = false; 
boolean tr = false; 
boolean pta = false; 
while((line=br.readLine())!=null){ 
    if(line.trim().isEmpty()) { 
     // end of record, print each of the 4 special Strings that didn't appear 
     if(!osi){ 
      out.println("online_system_id"); 
     } 
     if(!posi){ 
      out.println("proc_online_system_id"); 
     }  
     if(!tr){ 
      out.println("tran_reversed"); 
     } 
     if(!pta){ 
      out.println("prev_tran_approved"); 
     } 
     osi = false; 
     posi = false; 
     tr = false; 
     pta = false; 
    } else { 
     // track appearance of the 4 special Strings 
     if(line.contains("online_system_id")){ 
      osi = true; 
     } 
     if(line.contains("proc_online_system_id")){ 
      posi = true; 
     }  
     if(line.contains("tran_reversed")){ 
      tr = true; 
     } 
     if(line.contains("prev_tran_approved")){ 
      pta = true; 
     } 
    } 
    out.println(line);  //always print the current line 
} 
+0

Это дает другой ответ. – user3678383

+0

@ user3678383 Какая желаемая логика? – Eran

+0

@ user3678383 отредактированный ответ, основанный на вашем примере ввода и вывода. – Eran

0

изменение

if(line.trim().isEmpty()) 

в

if(!line.trim().isEmpty()) 

также:

if((line.contains("online_system_id"))){ 
       out.println("online_system_id"); 
      } 
      if((line.contains("proc_online_system_id"))){ 
       out.println("proc_online_system_id"); 
      }  
      if((line.contains("tran_reversed"))){ 
       out.println("tran_reversed"); 
      } 
      if((line.contains("prev_tran_approved"))){ 
       out.println("prev_tran_approved"); 
      } 
+0

Он дает совершенно другой ответ – user3678383

+0

также удаляет знак отрицания (!) Из внутреннего ifs – Stugal

+0

Вы попробовали это в конце? – user3678383

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