Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-09-2008, 17:49   #1
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
[Java] Ordinamento di un file XML tramite Jdom

Salve!
Stò avendo problemi nel fare l'ordinamento di un file xml usando le librerie jdom.
Questo è il codice che ho scritto:

Codice PHP:
int selezione 0;
    
String locazione casellasfoglia.getText();
    
impegno ciccio = new impegno (locazione,selezione);
    
int alto ciccio.getnumele(locazione);
    
Element agenda = new Element("agenda"); 
    
Element appuntamento = new Element("appuntamento");
    
Element gdescrizione = new Element ("descrizione");
    
Element nome = new Element("nome");
    
Element cognome = new Element("cognome");
    
Element gdata = new Element("data");
    
Element gora = new Element ("ora");
    
Element gpriorita = new Element ("priorita");
    for (
int i=0;i<ciccio.getnumele(locazione);i++){
    
ciccio = new impegno (locazione,i);
    
gdescrizione = new Element ("descrizione"); gdescrizione.setText(ciccio.getdescrizione());
    
nome = new Element("nome"); nome.setText(ciccio.getnome());
    
cognome = new Element("cognome"); cognome.setText(ciccio.getcognome());
    
gdata = new Element("data"); gdata.setText(ciccio.getdatastring());
    
gora = new Element ("ora"); gora.setText(ciccio.getora());
    
gpriorita = new Element ("priorita"); gpriorita.setText(ciccio.getpriorita());
    
appuntamento = new Element("appuntamento");
    
appuntamento.addContent(gdescrizione); 
    
appuntamento.addContent(nome);
    
appuntamento.addContent(cognome);
    
appuntamento.addContent(gdata);
    
appuntamento.addContent(gora);
    
appuntamento.addContent(gpriorita);
    
agenda.addContent(appuntamento);
    }
    
Element agenda2 agenda;
    List 
backup agenda.getChildren("appuntamento");
    List 
backup2 agenda2.getChildren("appuntamento");
    
Iterator pointer backup.iterator();
    
Iterator pointer2 backup2.iterator();
    
String descrizionetmp = new String();
    
String nometmp = new String();
    
String cognometmp = new String();
    
String datatmp = new String();
    
String oratmp = new String();
    
String prioritatmp = new String();
    
int giorno1 0;
    
int mese1 0;
    
int anno1 0;
    
GregorianCalendar data1 = new GregorianCalendar();
    
int giorno2 0;
    
int mese2 0;
    
int anno2 0;
    
GregorianCalendar data2 = new GregorianCalendar();

    while (
alto 0)
    {
        
pointer backup.iterator();
        
pointer2 backup2.iterator();
        
agenda2 = (Elementpointer2.next();
        for (
int c=0;c<alto-1;c++)
        {
            
agenda = (Elementpointer.next();
            
agenda2 = (Elementpointer2.next();
            
giorno1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(0,2));
            
mese1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(3,5));
            
anno1 Integer.parseInt(agenda.getChild("data").getTextTrim().substring(6,10));
            
data1 = new GregorianCalendar(anno1,(mese1-1),giorno1);
            
giorno2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(0,2));
            
mese2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(3,5));
            
anno2 Integer.parseInt(agenda2.getChild("data").getTextTrim().substring(6,10));
            
data2 = new GregorianCalendar(anno2,(mese2-1),giorno2);
            
System.out.println("C: " ", nome agenda1 :" agenda.getChild("nome").getTextTrim()+ ", nome agenda2 :" agenda2.getChild("nome").getTextTrim() + ", data1 :" 
                    
data1.get(GregorianCalendar.DAY_OF_MONTH) + "/" +
                (
data1.get(GregorianCalendar.MONTH)+1) + "/" 
                
data1.get(GregorianCalendar.YEAR) + ", data2 :" 
                
data2.get(GregorianCalendar.DAY_OF_MONTH) + "/" +
                (
data2.get(GregorianCalendar.MONTH)+1) + "/" 
                
data2.get(GregorianCalendar.YEAR));
            if (
data1.after(data2)==true)
            {
//                //temp <- agenda
    
System.out.println("Scambio effettuato tra " agenda.getChild("nome").getTextTrim() + " e " agenda2.getChild("nome").getTextTrim());
    
descrizionetmp agenda.getChild("descrizione").getTextTrim();
    
nometmp agenda.getChild("nome").getTextTrim();
    
cognometmp agenda.getChild("cognome").getTextTrim();
    
datatmp agenda.getChild("data").getTextTrim();
    
oratmp agenda.getChild("ora").getTextTrim();
    
prioritatmp agenda.getChild("priorita").getTextTrim();
    
//agenda <-- agenda2
    
agenda.getChild("descrizione").setText(agenda2.getChild("descrizione").getTextTrim());
    
agenda.getChild("nome").setText(agenda2.getChild("nome").getTextTrim());
    
agenda.getChild("cognome").setText(agenda2.getChild("cognome").getTextTrim());
    
agenda.getChild("data").setText(agenda2.getChild("data").getTextTrim());
    
agenda.getChild("ora").setText(agenda2.getChild("ora").getTextTrim());
    
agenda.getChild("priorita").setText(agenda2.getChild("priorita").getTextTrim());
    
//agenda2 <-- tmp
    
agenda2.getChild("descrizione").setText(descrizionetmp);
    
agenda2.getChild("nome").setText(nometmp);
    
agenda2.getChild("cognome").setText(cognometmp);
    
agenda2.getChild("data").setText(datatmp);
    
agenda2.getChild("ora").setText(oratmp);
    
agenda2.getChild("priorita").setText(prioritatmp);
            }
        }
        
alto--;
    }
    
pointer backup.iterator();
    
pointer2 backup2.iterator();
    
XMLOutputter xmlOut = new XMLOutputter(); 
    
xmlOut.setFormat(Format.getPrettyFormat()); 
    
FileOutputStream output
        try {
            
output = new FileOutputStream(new File(locazione));
            
xmlOut.output(new Document(agenda),output);
        } catch (
IOException erIO) {
        
System.out.println("IO Exception");
    } 
Ok magari a primo impatto sembra molto incasinato come codice.. ed in effetti lo è :P
Bisogna focalizzarsi principalmente sulla parte dell'ordinamento (fatto tramite Bubble sort), quando inizia il ciclo While per intenderci.
Il codice viene compilato (stranamente) senza problemi ma quando vado in esecuzione ho quest'errore:
Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"
Quell'errore non mi è nuovo, l'ho già visto quando usavo il "agenda.addcontent" a sproposito.. ma stavolta pare sia diverso.
Il problema infatti avviene al momento della scrittura del file, dopo aver ordinato il tutto.
Commentando il codice di scrittura infatti non ci sono problemi di sorta.
Ho provato anche a commentare la fase dello "scambio", ma il problema resta sempre lo stesso.
Se commento tutto l'ordinamento non ci sono problemi.
Insomma.. in teoria il problema è in quello che viene eseguito dentro il for ma non dentro l'if (c'è un solo for quindi non è difficile capire a quel mi riferisco :P ) ma non riesco proprio a capire cosa diavolo può essere.

ps: stò scrivendo il tutto con netbeans e dopo aver fatto una GUI, quindi c'è un riferimento ad una casella, per l'appunto "casellasfoglia"

Grazie, mi ci stò ammattendo :P
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 20:02   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Una delle caratteristiche interessanti di JDOM è che una lista di nodi non è rappresentata da classi specifiche e poco maneggevoli come NodeList per il DOM ma è gestita come una collezione java.util.List. E quindi è molto più pratica, intuitiva e maneggevole.

Con questo voglio dire che se devi solo scambiare 2 nodi nella lista, basta semplicemente scambiare i due oggetti nella lista, non scambiare tutti i nodi di testo contenuti nei nodi figli!!!!

E non ti conviene nemmeno usare gli iteratori ... basterebbe sfruttare size() ed agire a livello di indici.

E visto che la data è in un formato ben preciso e la usi diverse volte, ti conviene pure fare un metodo che converte la stringa in un Calendar o Date.

Insomma ... con un po' di accortezza il codice verrebbe molto più pulito e almeno la metà in meno di quello che hai scritto.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 20:24   #3
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Grazie mille per la risposta
Ecco, il problema è che non sono proprio un esperto di programmazione (ormai s'era capito) quindi anche volendo fare certe cose non saprei come farle :P
Per invertire i 2 nodi l'idea iniziale era appunto di scambiarli tra di loro.. ma viste le difficoltà tecniche ho dovuto abbandonare e fare quest'altro metodo stupido, ma funzionante.
Per questo vista la tua cortesia mi piacerebbe farti un paio di domande
- Come faccio a sostituire solo il nodo?
- Come faccio a "selezionare" l'elemento successivo senza l'uso di un iteratore?

Grazie mille ancora
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 24-09-2008, 20:44   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
- Come faccio a sostituire solo il nodo?
- Come faccio a "selezionare" l'elemento successivo senza l'uso di un iteratore?
List ha get() e set() a cui si passa l'indice, quindi basterebbe usare questi due metodi.
Nota che si può sfruttare una cosa interessante di set() e cioè che ritorna l'elemento precedente!!! E questo permetterebbe di usare solo 1 get e 2 set e sopratutto senza usare variabili temporanee.

Tecnica che è stata utilizzata da un metodo di java.util.Collections che è:
public static void swap(List list, int i, int j)
(solo da Java 1.4 in poi)
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 01:15   #5
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Quote:
Originariamente inviato da andbin Guarda i messaggi
List ha get() e set() a cui si passa l'indice, quindi basterebbe usare questi due metodi.
Nota che si può sfruttare una cosa interessante di set() e cioè che ritorna l'elemento precedente!!! E questo permetterebbe di usare solo 1 get e 2 set e sopratutto senza usare variabili temporanee.

Tecnica che è stata utilizzata da un metodo di java.util.Collections che è:
public static void swap(List list, int i, int j)
(solo da Java 1.4 in poi)
Ti ringrazio ancora una volta per la risposta
Il metodo dei get() e set() è interessante, ma non riesco ad applicarlo al mio caso.
Allora, il file xml che stò costruendo è strutturato così:

<agenda>
<appuntamento>
<descrizione>compleanno</descrizione>
<nome>pino</nome>
<cognome>barba</cognome>
<data>01/12/2008</data>
<ora>00:00</ora>
<priorita>Trascurabile</priorita>
</appuntamento>
</agenda>

Io ho dichiarato come Element agenda, appuntamento e tutto il resto, dopodichè ho caricato dentro appuntamento i 6 campi (descrizione, nome etc) e l'ho fatto finchè non finivo di leggere dal file xml. Ogni volta che finivo a leggere quei 6 campi aggiungevo appuntamento ad agenda.
Infine creo una lista chiamata "backup" nella quale colloco i vari appuntamenti appena caricati nell'agenda tramite la stringa:
List backup = agenda.getChildren("appuntamento");
E fin qui tutto ok.
Ora a me serve "ricacciare" da questo Element chiamato agenda la data del primo elemento, per confrontarla con quella del secondo e nel caso sostituirla.
Se faccio backup.get(1) mi restituisce "[Element: <appuntamento/>]", ovviamente ho lo stesso output anche con backup.get(2).
Andando un po' a logica ho provato a fare backup.get(1).getChildren("data") ma getChildren non compare tra i metodi disponibili (backup alla fine è cosa ben diversa da agenda quindi l'errore è motivato).

Come faccio quindi a ricacciarmi la data?
Una volta sorpassato questo scoglio penso di poter fare il resto

Grazie ancora
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 08:25   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Codice:
List appuntamenti = agenda.getChildren("appuntamento");
int size = appuntamenti.size();

for (int i = 0; i < size-1; i++) {
    for (int j = i+1; j < size; j++) {
        Element appuntamento1 = (Element) appuntamenti.get(i);
        Element appuntamento2 = (Element) appuntamenti.get(j);

        Calendar calendar1 = metodoPerParsingData(appuntamento1.getChildTextTrim("data"));
        Calendar calendar2 = metodoPerParsingData(appuntamento2.getChildTextTrim("data"));

        if (calendar1.after(calendar2)) {
            appuntamenti.set(i, appuntamento2);
            appuntamenti.set(j, appuntamento1);
        }
    }
}
Dove metodoPerParsingData è un metodo che dovresti fare (meglio un altro nome ... es. parseData), magari statico, che dato un String crea e ritorna un Calendar (GregorianCalendar) facendo il parsing della stringa (come hai fatto).

Tutto qui .... quante righe sono??? Poche e ... pulite e chiare. Nota lo swap dei due elementi ... basta settare gli Element scambiando gli indici.

P.S. il codice non l'ho provato, ovviamente. Ma in linea di massima dovrebbe essere ok.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet

Ultima modifica di andbin : 25-09-2008 alle 09:07.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 09:14   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Prendo spunto dal tuo codice Andbin, per modificarlo di pochissimo in modo da renderlo un'implementazione dell'ordinamento Bubblesort, con l'aggiunta di un flag per interrompere l'algoritmo non appena la lista è ordinata (ovvero quando non ci sono più scambi in un'intera iterazione).

Codice:
List appuntamenti = agenda.getChildren("appuntamento");
int size = appuntamenti.size();
boolean flag = false;

while (size > 0)
{
    if (flag)
    {
        break;
    }
    
    for (int i = 0; i < size-1; i++)
    {
        flag = true;
        
        Element appuntamento1 = (Element) appuntamenti.get(i);
        Element appuntamento2 = (Element) appuntamenti.get(i+1);

        Calendar calendar1 = metodoPerParsingData(appuntamento1.getChildTextTrim("data"));
        Calendar calendar2 = metodoPerParsingData(appuntamento2.getChildTextTrim("data"));

        if (calendar1.after(calendar2)) 
        {
            appuntamenti.set(i, appuntamento2);
            appuntamenti.set(i+1, appuntamento1);
            flag = false;
        }       
    }
    size--;
}
Non l'ho provato, spero di non aver commesso errori.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 25-09-2008 alle 09:21.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 12:25   #8
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Purtroppo non funziona, c'è lo stesso errore che avevo io

Ecco il codice che ho messo:

Codice PHP:
List backup agenda.getChildren("appuntamento");
    
int giorno1 0;
    
int mese1 0;
    
int anno1 0;
    
GregorianCalendar data1 = new GregorianCalendar();
    
int giorno2 0;
    
int mese2 0;
    
int anno2 0;
    
GregorianCalendar data2 = new GregorianCalendar();
    
int size backup.size();
    
Element appuntamento1;
    
Element appuntamento2;
for (
int i 0size-1i++) {
    for (
int j i+1sizej++) {
        
appuntamento1 = (Elementbackup.get(i);
        
appuntamento2 = (Elementbackup.get(j);
            
giorno1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(0,2));
            
mese1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(3,5));
            
anno1 Integer.parseInt(appuntamento1.getChildTextTrim("data").substring(6,10));
            
data1 = new GregorianCalendar(anno1,(mese1-1),giorno1);
            
giorno2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(0,2));
            
mese2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(3,5));
            
anno2 Integer.parseInt(appuntamento2.getChildTextTrim("data").substring(6,10));
            
data2 = new GregorianCalendar(anno2,(mese2-1),giorno2);
        if (
data1.after(data2)) {
            
backup.set(iappuntamento2);
            
backup.set(jappuntamento1);
        }
    }

Al momento della compilazione dice:
Note: C:\Users\<mionome>\Documents\NetBeansProjects\Rubrica\src\calendario.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

Però il programma parte ugualmente.
Quando provo a fare l'ordinamento esce lo stesso errore di prima, ovvero:

Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"

Bloccandosi li.. non arriva neanche alla fase di scrittura dell'output

edit: facendo 2 prove ho trovato cosa dà l'errore:
backup.set(i, appuntamento2);
backup.set(j, appuntamento1);
Per trovarlo ho messo vari "System.out" in giro per il codice e si blocca sempre dopo aver eseguito quello prima di queste 2 istruzioni

Ultima modifica di odiojava.net : 25-09-2008 alle 12:36.
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 13:54   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
Al momento della compilazione dice:
Note: C:\Users\<mionome>\Documents\NetBeansProjects\Rubrica\src\calendario.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Questo perché stai usando almeno un JDK 5 o superiore e stai usando List non parametrizzato (JDOM non usa i "generics").
Il warning si potrebbe sopprimere ma comunque non te ne curare più di tanto (anche perché tra poco vedrai come risolvere senza fare dei set() su List).

Quote:
Originariamente inviato da odiojava.net Guarda i messaggi
Quando provo a fare l'ordinamento esce lo stesso errore di prima, ovvero:

Exception in thread "AWT-EventQueue-0" org.jdom.IllegalAddException: The Content already has an existing parent "agenda"
Già .... ma il motivo lo si spiega subito. Premetto che non sono espertissimo della libreria JDOM (conosco giusto le caratteristiche a livello generale ed ho fatto qualche prova in passato).
Quando si setta o si aggiunge un elemento nella List fornita da JDOM, controlla che l'elemento non abbia già un parente. Ho anche provato a fare un detach() sul Element ma sembra non funzionare.

Comunque una soluzione l'ho trovata: scambiare non gli elementi stessi ma il loro intero contenuto. E funziona.

Dato un file XML:
Codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<agenda>
  <appuntamento><data>01/12/2008</data></appuntamento>
  <appuntamento><data>05/10/2007</data></appuntamento>
  <appuntamento><data>16/07/2008</data></appuntamento>
  <appuntamento><data>20/04/2008</data></appuntamento>
</agenda>
Con questo codice, ordino per data e scrivo su un nuovo file:

Codice:
import java.io.*;
import java.util.*;
import java.text.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
import org.jdom.output.Format;

public class TestAgenda {
    public static DateFormat df;

    public static void main(String[] args) {
        try {
            df = new SimpleDateFormat("dd/MM/yyyy");
            df.setLenient(false);

            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build("agenda.xml");

            Element agenda = doc.getRootElement();

            List appuntamenti = agenda.getChildren("appuntamento");
            int size = appuntamenti.size();

            for (int i = 0; i < size-1; i++) {
                for (int j = i+1; j < size; j++) {
                    Element appuntamento1 = (Element) appuntamenti.get(i);
                    Element appuntamento2 = (Element) appuntamenti.get(j);

                    Calendar calendar1 = parseDate(appuntamento1.getChildTextTrim("data"));
                    Calendar calendar2 = parseDate(appuntamento2.getChildTextTrim("data"));

                    if (calendar1.after(calendar2)) {
                        List content1 = appuntamento1.removeContent();
                        List content2 = appuntamento2.removeContent();

                        appuntamento1.setContent(content2);
                        appuntamento2.setContent(content1);
                    }
                }
            }


            XMLOutputter outputter = new XMLOutputter();
            FileOutputStream output = new FileOutputStream("agenda_ord.xml");
            outputter.output(doc, output);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Calendar parseDate (String s) throws ParseException {
        Date d = df.parse(s);
        Calendar c = Calendar.getInstance();
        c.setTime(d);

        return c;
    }
}
Probabilmente ci sono soluzioni migliori ma ora non ho tempo/voglia di andare ad indagare sulla libreria JDOM.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-09-2008, 20:19   #10
odiojava.net
Junior Member
 
Iscritto dal: Sep 2008
Messaggi: 8
Funziona così bene che stò per piangere dalla commozione
Grazie mille, finalmente il programma è sulla buona strada per essere completato ^_^
Ah visto che ci stò ne approfitto per chiedere una cosetta veloce
Sapresti anche come "bloccare in scrittura" un determinato file tramite codice?
In pratica vorrei che mentre il programma è in funzione non si possa modificare il file xml, per poi risbloccarlo ad esecuzione terminata.

Cmq questa è una cosa superflua, la parte importante è fatta
Grazie ancora ^__^
odiojava.net è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
La corsa alla superintelligenza è...
Le memorie cinesi sfidano sé stes...
Dash cam 4K con doppia telecamera, GPS, ...
Qwen 4: Alibaba conferma l'addestramento...
Super El Niño, allarme globale: 451.000 ...
Toyota, 400.000 robot in fabbrica senza ...
Hanno bucato l'FBI e ora dettano le cond...
Standard sì, licenze no: la linea di Ope...
Guida all'acquisto: quale smartphone HON...
PS6 e nuova XBOX, i SoC avrebbero supera...
Alcuni frigoriferi smart di Samsung si a...
Italiani e IA, l'entusiasmo cala: avanti...
Robin Williams resuscitato dall'IA per p...
Acquista una RTX 5090 usata per risparmi...
CLOSEDQUORUM, il malware che usa quattro...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:13.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v