Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    aprire e modificare un file di testo o csv con form action

    Mario Vegliante ha scritto un messaggio il giorno 10-11-2007 20:18:
    Salve mi chiamo Mario Vegliante e vivo un Germania.
    Frequento un corso di informatica da circa un mese.
    Mi hanno chiesto di scrivere un programma in Perl capace di automatizzare il lavoro di una stampante da codifica.
    Non so proprio da dove cominciare.

    Dovrebbe essere una cosa del genere, da un form in html dovrei interrogare(aprire) un file csv o di testo, cercando una determinata parola e dovrei avere come risposta ancora un nuovo form e quindi avere la possibilitá di cambiarne i valori in quella determinata posizione (es. nome:Mario sostituirlo con nome:Luigi)per poi salvare il tutto in un nuovo file o nello stesso.

    Non so proprio come adattare gli script al mio programma, ho generato dei form per l´action ma non funzionano.
    Se potrebbe inviarmi degli script commentati in italiano le sarei molto grado per il suo aiuto(non conosco l´inglese).
    La prego é di fondamentale importanza, purtroppo qui i tedeschi non sono cosí gentili da potermi aiutare essendo uno straniero campione del mondo.
    Ringraziandola in anticipo le auguro una buona serata.
    Mario Vegliante

    Martedí ha risposto:

    Non è chiarissimo quello che deve accadere. Cmq mi sembra ti capire che il lancio dello script perl avviene quando eseguo una data operazione su una pagina HTML. Il server è in grado di riconoscere l'interprete perl? La pagina HTML deve passare dei dati o solo lanciare lo script?
    Questa determinata parola da ricercare può comparire anche in altri contesti?

    1) Supponiamo che il server interpreti perl, e la parola sia "prova"
    2) lo script perl apre il file:

    $tot=""; #per generare il nuovo file
    open (FL,"file.csv");
    while (<FL> ) #leggo riga per riga
    {
    if ($_ =~ /prova/) #ovvero se la riga contiene la parola prova
    {$_ =~ s/prova/nuova parola/g} #ovvero sostituisci la parola prova con la nuova parola
    $tot="$tot$_"; #rigenero il file con la riga modificata
    }
    close (FL);

    3) $tot contiene tutte le righe del file.csv con le modifiche, ora basta sotituire il file
    open (FL,">file.csv"); #se non voglio sovrascrivere il file basta cambiare il nome
    print FL $tot;
    close (FL);

    4) e generare la risposta
    print "Content-Type: text/html\n\n";
    print<<EOF;
    <html>
    <body>
    risposta in formato HTML
    </body>
    </html>
    EOF

    exit;

    la pagina che lancia lo script invece sarà così:
    <html>
    <body>
    <form action="percorso della pagina che contiene lo script" method="post">
    <input type="submit" value="lancia lo script">
    </form>
    </body>
    </html>

    Ti consiglio di postare il quesito anche sul forum, ci sono molte persone che lo visitano e magari possono scaturire altre idee!

  2. #2

    $tot

    Grazie per la risposta, ma comunque non funziona, non mi fa leggere il file.
    Ho provato :

    $tot=""; #per generare il nuovo file
    open (FL,"miofile.txt");
    while (<FL> ) #leggo riga per riga
    {
    if ($_ =~ /cognome:Vegliante/) #ovvero se la riga contiene la parola prova
    {$_ =~ s/cognome:Vegliante/cognome:Becker/g} #ovvero sostituisci la parola prova con la nuova parola
    $tot="$tot$_"; #rigenero il file con la riga modificata
    }
    close (FL);
    print "Content-Type: text/html\n\n";
    print<<EOF;

    e come risultato mi cancellato il tutto senza scrivere niente.
    Ho provato ha posizionarmi con gli array su una detrminata parola e funziona, peró
    ho sempre il problema per inserire il tutto in un tag, prima per leggere l´attuale parola nel tag stesso, poi per modicarla e salvarla senza cancellare le altre avendo una risposta da un´ altra pafina HTML con un link per salvare il tutto.

    Lo so che sono un testone peró ti prego aiutami, ho visto che sei molto bravo e principalmente hai molta esperienza.

    #!/usr/bin/perl
    use strict;
    my @merk;
    my $zeile;
    open (TXT, "<miofile.txt") || die "$!\n";
    while (<TXT>) {
    $merk[$.] = $_;

    }
    close TXT;

    foreach $zeile ( @merk ) {

    }

    print $merk[3];#corrisponde alla posizione cognome:Vegliante


  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    te lo riscrivo completo:

    #!/usr/bin/perl
    $tot=""; #per generare il nuovo file
    open (FL,"file.csv");
    while (<FL> ) #leggo riga per riga
    {
    if ($_ =~ /prova/) #ovvero se la riga contiene la parola prova
    {$_ =~ s/prova/nuova parola/g} #ovvero sostituisci la parola prova con la nuova parola
    $tot="$tot$_"; #rigenero il file con la riga modificata
    }
    close (FL);

    open (FL,">file.csv"); #se non voglio sovrascrivere il file basta cambiare il nome
    print FL $tot;
    close (FL);

    exit;
    Se non funziona può essere perchè:
    - il percorso del file non è corretto
    - non hai i permessi per sovrascrivere il file

    La tua correzione non è molto diversa dal mio codice.
    Per verificare la lettura, puoi aggiungere queste righe:
    #!/usr/bin/perl
    $tot=""; #per generare il nuovo file
    open (FL,"file.csv");
    while (<FL> ) #leggo riga per riga
    {
    print "riga letta: $_\n";
    if ($_ =~ /prova/) #ovvero se la riga contiene la parola prova
    {$_ =~ s/prova/nuova parola/g} #ovvero sostituisci la parola prova con la nuova parola
    print "riga modificata: $_\n";
    $tot="$tot$_"; #rigenero il file con la riga modificata
    }
    close (FL);

    print "\n\n file corretto:\n$tot";

    open (FL,">file.csv"); #se non voglio sovrascrivere il file basta cambiare il nome
    print FL $tot;
    close (FL);

    exit;

  4. #4
    #!/usr/bin/perl

    $tot=""; #per generare il nuovo file
    open (FL,"miofile.txt");
    while (<FL> ) #leggo riga per riga
    {
    print "riga letta: $_\n";
    if ($_ =~ /nachname:Vegliante/) #ovvero se la riga contiene la parola prova
    {$_ =~ s/nachname:Vegliante/nachname:Becker/g} #ovvero sostituisci la parola prova con la nuova parola
    print "riga modificata: $_\n";
    $tot="$tot$_"; #rigenero il file con la riga modificata
    }
    close (FL);
    print "\n\n file corretto:\n$tot";
    open (FL,">miofile.txt"); #se non voglio sovrascrivere il file basta cambiare il nome
    print FL $tot;
    close (FL);

    Compilato:
    riga letta: vorname: Mario
    riga modificata: vorname: Mario
    riga letta: nachname : Vegliante
    riga modificata: nachname : Vegliante
    riga letta: geburtsdatum: 26-09-1965
    riga modificata: geburtsdatum: 26-09-1965
    riga letta: geburtsort: Solopaca
    riga modificata: geburtsort: Solopaca
    riga letta: Strasse: Anton-Oncken-Str. 5
    riga modificata: Strasse: Anton-Oncken-Str. 5
    riga letta: PLZ: 26409
    riga modificata: PLZ: 26409
    riga letta: Stadt: Wittmund
    riga modificata: Stadt: Wittmund
    file corretto:
    vorname: Mario
    nachname : Vegliante
    geburtsdatum: 26-09-1965
    geburtsort: Solopaca
    Strasse: Anton-Oncken-Str. 5
    PLZ: 26409
    Stadt: Wittmund

    Ho trovato l´errore, nel leggere la riga si ferma a nachname: e non va piú avanti perché ha trovato la prima parola uguale, scrivendo solo il cognome lo trova e lo modifica.
    Grazie mille ma purtroppo non ho finito.
    Devo inserire il tutto in dei tag, prima una funzione di ricerca e poi una di attualizzazione.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    non ho capito cosa intendi per "Devo inserire il tutto in dei tag, prima una funzione di ricerca e poi una di attualizzazione". Cmq qui il perl non c'entra, giusto?

    non so se ti basta ciò che scrivevo nel primo messaggio:

    la pagina che lancia lo script:
    <html>
    <body>
    <form action="percorso della pagina che contiene lo script" method="post">
    <input type="submit" value="lancia lo script">
    </form>
    </body>
    </html>

    mentre allo script aggiungi:
    ...

    print "Content-Type: text/html\n\n";
    print<<EOF;
    <html>
    <body>
    risposta in formato HTML
    </body>
    </html>
    EOF

    exit;

    Dipende da ciò che devi fare esattamente!!! Buon Lavoro

  6. #6
    Grazie di tutto, ma mi ero illuso.
    Dopo aver provato il tutto, il prof. ha detto che era troppo semplice cosi e quindi mi ha dato un file con estensione 'ejt' che contiene programmi di codifica tipo:

    APDU;00000000;90;;
    TERMINATE;

    #SETCHIPTYPE;11;
    REQASYNC ;90;3B;reqATR
    SETCHIPTYPE;11;

    :isInitialized

    # ----- LOS -----------------------------------------------

    APDU;00A40400 07 A000000003000000;90;;Select CM

    # ----- Init Update .....

    SETVAR;x001;~GP_01:0000000000000099,init-update~;;

    APDU ;$x001$;90;;Init Update

    # ----- Ext Auth .....

    SETVAR;x002;~GP_01:$RESPONSEHEX$,ext-auth~;;SetVar X2
    ECHO;Ext-Auth $x002$;l;
    APDU ;$x002$;90;;Ext Auth
    ECHO;$RESPONSESW$;;


    # ----- upload -b 128 -m ${CURR_PKG_INSTDATA} -c "${CURR_CAP_FILE}"

    APDU;80E60200 19 06A0000000630200000EEF0CC6020000C8020000C702000000 00;9000;;

    # ----- Start loading Header.cap (23 byte)

    APDU;80E80000 17 C48246 68 01 00 10 DE CA FF ED01 02 04 00 01 06 A0 00 00 00 63 02 00;9000;;Header.cap


    # ----- Start loading Directory.cap (34 byte)

    APDU;80E80001 22 02001F0010001F00100032042E0141383D00DB075500000B3B 00280014009505010000;9000;;


    # ----- Start loading Import.cap (53 byte)

    APDU;80E80002 35 040032 05 00 01 07 A0 00 00 0062 00 01 02 01 07 A0 00 00 00 62 01 02 01 01 07A0 00 00 00 62 01 01 02 01 07 A0 00 00 00 62 0201000106A00000015100 00;9000;;


    # ----- Start loading Applet.cap (19 byte)

    APDU;80E80003 13 0300 10 01 0C A0 00 00 00 63 504B 43 53 2D 31 35 32 FC 00;9000;


    # ----- Start loading Class.cap (324 byte)

    APDU;80E80004 80 0601 41 00 80 00 05 00 05 01 1600 00 01 70 01 C1 01 E3 02 05 02 21 02 36 02 6F03 10 03 32 03 BC 03 FC 04 4A 04 90 05 AD 06 8E06 E5 07 4C 07 91 07 D3 08 4408 9B 09 BC 00 8000 06 01 02 01 0D 00 00 0A 84 0A 99 0A A3 0A AA0A B4 0A C8 0A D4 0A E5 0A F0 0A FF 0B 0A 0B 110B 18 00 80 00 02 00 02 01 00 00 00 00 00 36 0503 02 0D 05 00 00 0B EE 0B 74 0B 79 0B 83 0B E500 00 64 05 00 00;9000;;
    APDU;80E80005 80 050F 03 00 00 0C 5E 0B 83 0D 0A00 80 00 0B 05 06 01 03 00 00 0D 88 0D AA 0E 0200 80 00 03 00 03 01 0F 00 00 0E B3 0F 04 0F 0F0F 23 10 1E 11 27 11 62 11 A014 36 15 55 15 D516 3D 16 75 17 10 17 9F 00 80 00 0E 00 0E 01 1500 00 19 42 19 55 19 71 19 8A 19 A5 1B A5 1B BD1C 81 1C C7 1D 17 1E 0C 1F 36 23 43 23 6B 23 9823 AC 23 CC 24 2D 24 A1 30 EF 31 22 00 80 00 0603 03 01 01 00 00;9000;;
    APDU;80E80006 44 0032 0B 01 82 03 08 03 05 04 0700 01 33 2E FF FF 33 20 33 38 33 0A 33 1D 35 6B36 48 82 11 02 08 09 00 00 36 06 04 01 0D 04 0000 37 70 36 F1 36 FF 37 41 0000 36 00 FF 00 0E03 00 00 37 A3 37 B2 37 FF 00;9000;;

    # ----- Start loading Method.cap (14400 byte)

    APDU;80E80007 80 0738 3D 25 01 47 00 16 01 5F 0059 01 47 80 16 01 68 00 65 01 91 00 0A 01 9D 00A4 01 72 80 44 01 B8 00 59 03 34 80 85 03 B9 0068 05 57 80 1E 05 77 00 59 06 3F 80 10 06 51 00A4 06 78 80 0B 06 85 00 A4 09 50 00 17 09 69 0059 09 50 80 17 09 84 00 95 0C 29 00 20 0C 4B 0065 0C 29 80 20 0C 55 00 59 0C 7C 80 1E 0C 9C 0065 0C B6 80 34 0C EC 00 65 0E A1 80 08 0E AB 0059 0E B5 80 45 00;9000;;Method.cap
    APDU;80E80008 80 0EFC 00 59 13 5F 80 9F 14 00 0059 14 99 80 B1 15 4C 00 59 18 B6 00 79 19 31 0059 18 B6 80 79 19 3A 00 65 19 44 80 07 19 4D 0059 1A EA 00 5B 1B 47 00 59 1A EA 80 5B 1B 4E 0065 1D 75 80 38 1D AF 00 65 1D CC 80 35 1E 03 0065 21 A6 80 D3 22 7B 00 65 22 D9 80 50 23 2B 0065 25 3A 80 50 25 8C 00 59 26 44 03 5D 29 A3 0065 26 44 83 5D 29 D6 00 59 2D C1 00 55 2E 18 0065 2B 4B 04 B1 00;9000;;
    APDU;80E80009 80 2FFF 00 65 2B 4B 04 B1 30 37 0059 2B 4B 84 B1 30 6F 00 B8 31 6A 00 6E 31 D8 0065 31 6A 80 6E 31 E2 00 CC 36 52 80 51 36 A5 00CC 03 22 18 8C 00 64 18 01 87 00 18 01 87 01 1801 87 02 18 01 87 03 18 01 87 04 18 19 87 03 188F 00 6E 3D 8C 00 74 87 00 AD 00 8B 00 79 18 058D 00 99 87 04 70 12 2D 11 6A 84 8D 00 A2 70 092E 11 6A 81 8D 00 A2 7A 09 71 18 1D 05 41 91 00A6 87 01 18 8F 00;9000;;
    APDU;80E8000A 80 00A7 3D 7B 00 B9 03 04 1E 1F 1604 8C 00 FD 87 02 1F 65 16 AD 02 15 05 16 06 1F8B 00 49 70 0A 28 07 11 6A 80 8D 00 A2 AD 02 8B00 79 AD 01 03 AD 00 37 AD


    bello vero?
    dovrei posizionarmi su una la linea a piacere ed avere la possibilitá e rifare quello ché abbiamo con una parola.
    Come si fa?
    specialmente a leggere in una linea parola per parola e di piú con punti e virgola di mezzo o punti interrogativi?
    mi sto esaurendo non so piú pensare, qui vogliono sempre di piú e in fretta.

  7. #7
    Questo vuole che in una linea come questa,mi fermi ad analizzare parola per parola per parola per poi fermarmi al primo punto interrogativo e avere la possibilitá di modificare per poi continuare a leggere fino all´ultima parole della frase o all´ultimo punto interrogativo.


    CMPDATA;<a:PROD>;<a:?Kartentyp (TEST|PROD):TEST?>;;
    :master:

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    Simpatico il tuo prof
    Non c'è molto di diverso. La tua riga è così:
    APDU;80E80003 13 0300 10 01 0C A0 00 00 00 63 504B 43 53 2D 31 35 32 FC 00;9000;

    Pare che
    ADPU non ti interessa,
    80E80003 è un codice progressivo
    9000 alla fine è sempre lo stesso

    ogni riga che trovi la scorpori, tieni la parte centrale alla quale togli il codice progressivo e fai il confronto sul codice (che tipo di codificazione è esadecimale? Puoi convertire la variabile che cerchi nello stesso modo?) ... comunque:

    #!/usr/bin/perl
    $tot=""; #per generare il nuovo file
    open (FL,"file.csv");
    while (<FL> ) #leggo riga per riga
    {
    if ($_ =~ /ADPU\;/) #guardo solo le righe che contengono il codice ed escludo i commenti
    {
    #genero l'array separando per ";"
    @mom=split(/\;/,$_);
    $campo_verifica=substr($mom[1],9,length($mom[1])); #tolgo il numero progressivo
    #qui probabilmente devi convertire il codice esadecimale o lo verifichi
    #il problema è che io non so che conversione usi

    if (condizione per la modifica)
    {
    #modifica
    #rigeneri $_
    }
    }
    $tot="$tot$_";
    }
    close (FL);

    open (FL,">file.csv"); #se non voglio sovrascrivere il file basta cambiare il nome
    print FL $tot;
    close (FL);

    exit;
    si semplificherebbe molto se tu potessi convertire la tua variabile all'inizio:
    $variabile_convertita=#qui metti il valore della conversione
    tutto il resto rimane come nel messaggio precedente: semplice e veloce!
    Esempio nel tuo codice al posto di "nachname:Vegliante" metti
    $variabile_convertita="13 0300 10 01 0C A0 00 00 00 63 504B 43 53 2D 31 35 32 FC 00"
    $variabile_sost="80 00A7 3D 7B 00 B9 03 04 1E 1F 1604 8C 00 FD 87 02 1F 65 16 AD 02 15 05 16 06 1F8B 00 49 70 0A 28 07 11 6A 80 8D 00 A2 AD 02 8B00 79 AD 01 03 AD 00 37 AD "
    nella condizione di ricerca:
    f ($_ =~ /$variabile_convertita/) ...
    nella sostituzione:
    $_ =~ s/$variabile_convertita/$variabile_sost/g

    però ribadisco, .. bisognerebbe sapere qualcosa in più su quel tipo di codifica.
    Spero di averti aiutato

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    Originariamente inviato da Mario Vegliante
    Questo vuole che in una linea come questa,mi fermi ad analizzare parola per parola per parola per poi fermarmi al primo punto interrogativo e avere la possibilitá di modificare per poi continuare a leggere fino all´ultima parole della frase o all´ultimo punto interrogativo.


    CMPDATA;<a:PROD>;<a:?Kartentyp (TEST|PROD):TEST?>;;
    :master:
    questo cambia le cose
    se vuoi avere parola per parola
    @parole=split(/\;/,$_); #dove $_ è la tua riga
    #se i punti interrogativi possono essere ovunque
    foreach $parola(@parole)
    {
    #condizione di controllo e modifica
    }
    #se i punti interrogativi sono solo al campo 2 cioè <a:?Kartentyp (TEST|PROD):TEST?>
    #puoi separare ulteriormente (ci sono molti modi per farlo):
    @punti_Int=split(/\?/,$parole[1]);
    #a questi punto hai che $punti_Int[1]="Kartentyp (TEST|PROD):TEST" e ci fai quel che voi

    non mi è chiaro però perchè è necessario fare tutto questo giro .... credo puro scopo didattico ....

  10. #10
    Non ci capisco niente, é una settimana che stó cercando di leggere tutorial e dispense su Perl che sono talmente confuso da non ricordare nemmeno il mio nome.
    Ora ha detto che nelle righe come quella sopra devo cercare di individuare i punt interrogativi e ipunt e virgola perché quelli sono i punti per poter cambiare il comando del codici di base.
    Ti ringrazio per la tua pazienza, spero possa tornare utili anche a te.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.