Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Parser File

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230

    Parser File

    Ciao ragazzi,
    ho inizato a scrivere il codice per fare il parsing di un file come quello di seguito
    codice:
    00002000 <_start>:
    _start:
      /* Init floating point instructions. */
    
      /* calculate address of _Lconst_table */
      bl _Lref1                  /* get current address */
        2000:       48 00 00 05     bl      2004 <_Lref1> 
    
    00002004 <_Lref1>:
    _Lref1:
            mflr r4                    /* r4=address of _Lref1 */
        2004:       7c 88 02 a6     mflr    r4 
            lwz     r5,(_Lref2-_Lref1)(r4) /* r5=offset to first constan */
        2008:       80 a4 00 94     lwz     r5,148(r4) 
            add     r5,r5,r4                           /* r5=address of first consrant */
        200c:       7c a5 22 14     add     r5,r5,r4 
    dal quale devo prendere solo per le righe marcate in grassetto il primo elmento (campo 200x)
    il sesto (campo, add, lwz ecc.) e i campi ri, ad esempio r5, r4, ecc...

    Ho iniziato con qualcosa del genere:
    codice:
     
    while((currentRecord = br.readLine()) != null){
    			String[] tokens = currentRecord.split("(\\s+)");
    			if(tokens.length != 0){
    				Row row  = new Row(); 
    				row.setPcaddress(tokens[0]);
    				row.setInstruction(tokens[6]); 
    				for( int i = 0; i<tokens.length; i++){
    					System.out.println(i + " "+tokens[i]);
    								
    				}
    Row è un oggetto in cui vorrei collezionare i sudetti campi.
    Ovviamente il codice non funziona, corretamente. Avete qualche idea da suggerirmi per
    risolvere questo problema? Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    codice:
    0 String[] tokens = currentRecord.split("(\\s+)");
    1			if(tokens.length > 6 && tokens[1]!= null 
    2					&& tokens[1].substring(0, 1).matches("[0-9]")){
    3				Row row  = new Row(); 
    4				row.setPcaddress(tokens[1].substring(0, 3).toLowerCase());
    5				row.setInstruction(tokens[6]); 
    6				for( int i = 7; i<tokens.length; i++){
    7					String [] registers = tokens[i].split("^r[0-9]+$");
    8					if(registers.length>0)
    9					 System.out.println(registers[0]);			
    10				}
    ho fatto qualche passo avanti, ora riesco a prendere sia gli elementi del tipo 200x e quelli del tipo lw, and...
    ancora non riesco a fare lo split corretto degli elementi del tipo r1 r2 ecc.
    il problema mi sembra alla riga 7 del precedente codice, dove lo split non mi pare funzionare correttamente.
    Grazie

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480

    Moderazione

    Originariamente inviato da puntino
    Ovviamente il codice non funziona, corretamente.
    Specifica cosa non funziona (l'errore o il comportamento anomalo che ottieni), oltre al codice sorgente, altrimenti gli utenti sono costretti a compilarlo per capire cosa non va.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Hi perfettamente ragione, scusatemi.
    E' il comportamento anomalo, come se lo split non funziona. in pratica,
    se ho una stringa del tipo
    r1,08(r2)
    oppure r7,r4,r5
    non ottengo lo split in
    r1
    r2
    (per la prima strnga
    e
    r7
    r4
    r5
    per la seconda.
    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.