I want to read particular string from a text file and store them in Excel sheets

前端 未结 4 830
遇见更好的自我
遇见更好的自我 2021-01-24 04:02

My Text file Contains line like this

FLTR TID: 0000003756 RPC ID: 0000108159 USER: Remedy Application Service

FLTR TID: 0000003756 RPC ID: 0

相关标签:
4条回答
  • 2021-01-24 04:19

    I would suggest you two improvements which will make it easier to solve your issue.

    1) Do not attempt to write into Excel sheet using Java, its slightly complicated. Instead you can write into a CSV file. You can externally open this CSV file and save as Excel.

    2) The below line might cause trimming of the user names:

     user=str.substring(48,75);   // This is to get user names
    

    Instead you can use

    user=str.substring(48);   // This is to get user names
    

    So, writing a CSV doesn't need Excel libraries and it can be opened in an excel workbook as well. :)

    0 讨论(0)
  • 2021-01-24 04:27

    First off, I am not an expert and have never tried this myself nor can I at the moment. From looking at your code I can spot a few design flaws that might be the reason for your problem.

    You only ever declare one row:

    static HSSFRow row= sheet.createRow((short)1);
    

    This means that in your store method, the same row's cells will be written again and again. What you are missing is the logic to create a new row if a unique name is encountered. For this task, may I suggest using a Set preferably one operating on hashes for the benefit of low lookup time, and storing all unique names in there? That way you can use a simply contains query.

    Furthermore, your countvariable is off and starts counting at 2, not at one. Initialise it to 0 or increment it after its use.

    Some pseudocode:

    private HashSet<String> names = new HashSet<>();
    // More fields here.
    
    // Now start in your if clause:
    if(str.contains("FLTR" && !names.contains(str.substring(48))
    {
        store(user, count);
        count++;
        names.add(str.substring(48));
    }
    
    // More of your code.
    
    private static void store(String user, int count)
    {
        // Create new row
        HSSFRow row = sheet.createRow((short)rowCount);
        rowCount++;
    
    
        row.createCell((short) 0).setCellValue(count);
        row.createCell((short) 1).setCellValue(user);
    }
    
    0 讨论(0)
  • 2021-01-24 04:38

    public class UniqueUSER {

    static HSSFWorkbook hwb=new HSSFWorkbook();

    static HSSFSheet sheet = hwb.createSheet("new sheet");

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

    {

    HSSFRow row;

    HashSet names = new HashSet<>();

    BufferedReader br=new BufferedReader(new FileReader("simle.log"));

    PrintStream out=new PrintStream("D:/Excel.xls");

    String str=null;

    int count=0;

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

    if(str.contains("FLTR"))

    {

    String user=str.substring(97, 135);

    count++;

    names.add(user);

    HSSFRow row1= sheet.createRow((short)count);

    row1.createCell((short) 0).setCellValue("names");

    }

    }

    Iterator itr=names.iterator();

    while(itr.hasNext()) {

    out.println(itr.next());  
    

    }

    }

    }

    0 讨论(0)
  • 2021-01-24 04:39
    • For Unique Names you can Use ArrayList<String> add whenever new UserName appears add and before that check whether user exist in arrayList or not (by the Use of contains("UName")) and than proceed.
    • Use String username=line.substring(line.lastindexOf(":")).trim(); or You can use line.split(":")[1].trim();

    For Excel row creation you can use loop.

    int i=0;
    while((str=br.readLine())!=null){
    row = sheet.createRow((short) i);
    cell = row.createCell(i);
    cell.setCellValue("UserName");//Set UserName after getting it from 'str'
    i++;
    }
    
    0 讨论(0)
提交回复
热议问题