Il linguaggio Visual Basic di Microsoft
 

Piccola app o script per sostituire il nome di un ******* txt con una parola contenuta all'interno del file

GraVer68 9 Gen 2015 17:00
Debbo creare uno script che all'esecuzione sostituisca il nome del ******* txt
con quanto contenuto tra parentesi nella seconda stringa contenuta al suo
interno.

Es. Filename.txt
--------------------------
%
O0028(CANNULA 100 MM)
#908=50(GREZZO)
G28V0
M500Z203
T101(FERMO CON UTENSILE)
G4X0.5
G0X0Y-30Z-1.5
M00
G0Z100
X150Y0
G28V0
--------------------------
...etc
--------------------------

Rinominare "Filename.txt" con la parola letta tra parentesi nella seconda riga
del ******* (CANNULA 100 MM) in "CANNULA 100 MM.txt"

Sapete darmi una mano?
Grazie a tutti.
Gra
Federico 9 Gen 2015 17:17
GraVer68 ha scritto...
>Debbo creare uno script che all'esecuzione sostituisca il nome del ******* txt
>con quanto contenuto >tra parentesi nella seconda stringa contenuta al suo
>interno.
>
>Es. Filename.txt
>--------------------------
>%
>O0028(CANNULA 100 MM)
>#908=50(GREZZO)
>G28V0
>M500Z203
>T101(FERMO CON UTENSILE)
>G4X0.5
>G0X0Y-30Z-1.5
>M00
>G0Z100
>X150Y0
>G28V0
>--------------------------
>...etc
>--------------------------
>
>Rinominare "Filename.txt" con la parola letta tra parentesi nella seconda
>riga del ******* (CANNULA 100 MM) in "CANNULA 100 MM.txt"

on error resume next
ff=freefile
open Filename.txt for binary as #ff
i=split(input(lof(ff),#ff),vbcrlf)(1)
close #ff
if i<>"" then
n=replace(split(i,"(")(1),")","")
if n<>"" then name Filename.txt as n & ".txt"
end if
Franz_aRTiglio 9 Gen 2015 17:18
GraVer68 ha detto questo venerdì :
> Debbo creare uno script che all'esecuzione sostituisca il nome del ******* txt

> con quanto contenuto tra parentesi nella seconda stringa contenuta al suo
> interno.
>
> Es. Filename.txt
> --------------------------
> %
> O0028(CANNULA 100 MM)
> #908=50(GREZZO)

> Rinominare "Filename.txt" con la parola letta tra parentesi nella seconda
> riga del ******* (CANNULA 100 MM) in "CANNULA 100 MM.txt"

E' sempre e solo nella 2nda riga ?
E' sempre e solo tra parentesi ?
C'e' il rischio che il ******* contenga caratteri speciali
non consentiti nel nome del ******* ? (esempio: ? * \ / )
Luca D 9 Gen 2015 22:33
On Friday, January 9, 2015 at 5:19:57 PM UTC+1, Federico wrote:
> GraVer68 ha scritto...
>>Debbo creare uno script che all'esecuzione sostituisca il nome del *******
txt
>>con quanto contenuto >tra parentesi nella seconda stringa contenuta al suo
>>interno.
>>
>>Es. Filename.txt
>>--------------------------
>>%
>>O0028(CANNULA 100 MM)
>>#908=50(GREZZO)
>>G28V0
>>M500Z203
>>T101(FERMO CON UTENSILE)
>>G4X0.5
>>G0X0Y-30Z-1.5
>>M00
>>G0Z100
>>X150Y0
>>G28V0
>>--------------------------
>>...etc
>>--------------------------
>>
>>Rinominare "Filename.txt" con la parola letta tra parentesi nella seconda
>>riga del ******* (CANNULA 100 MM) in "CANNULA 100 MM.txt"
>
> on error resume next
> ff=freefile
> open Filename.txt for binary as #ff
> i=split(input(lof(ff),#ff),vbcrlf)(1)
> close #ff
> if i<>"" then
> n=replace(split(i,"(")(1),")","")
> if n<>"" then name Filename.txt as n & ".txt"
> end if

Questo, se i ******* sono grossi, consuma un boato di memoria per niente,
caricandoli per intero

Se è un ******* di testo, basta aprirlo normale e fare due semplici

Line Input

invece di un Input(lof) solo per fare lo split...
Federico 10 Gen 2015 02:05
Luca D ha scritto...
>Questo, se i ******* sono grossi, consuma un boato di memoria per niente,
>caricandoli per intero
>Se è un ******* di testo, basta aprirlo normale e fare due semplici
>Line Input
>invece di un Input(lof) solo per fare lo split...

Hai detto bene ... "Se sono grossi"
Siccome sono ******* CNC che generalmente non superano i 100 Kb va benissimo!
Comunque la routine è solo un punto di partenza... uno spunto!
Federico 10 Gen 2015 02:06
PS: Il Line Input non sempre va a buon fine!
Luca D 10 Gen 2015 10:48
On Saturday, January 10, 2015 at 2:09:13 AM UTC+1, Federico wrote:
> PS: Il Line Input non sempre va a buon fine!

Negli ultimi 18 e passa anni non mi è mai successo che Line Input non sia
andato a buon fine in un ******* di testo... oltretutto risolve da solo sia la
terminazione di linea CR che CRLF, cosa che con lo Split() va tenuta in
considerazione
Federico 10 Gen 2015 12:45
Luca D ha scritto...
>Negli ultimi 18 e passa anni non mi è mai successo che Line Input non sia
>andato a buon fine in >un ******* di testo... oltretutto risolve da solo sia
>la terminazione di linea CR che CRLF, cosa che con >lo Split() va tenuta in
>considerazione

Negli ultimi 33 (0 34 non ricordo bene, dev'essere l'età avanzata)...
...comunque da sempre utilizzo queste tecniche collaudate per operare sui
files.
Ognuno utilizza le tecniche che più preferisce.
Comunque adesso sai indirettamente che può capitare... hai imparato una cosa
nuova! ;)
L'esempio che ho buttato giù l'ho scritto a braccio, è la prima cosa che mi
è venuta in mente.
Potresti buttare giù qualcosa anche tu, piuttosto che criticare l'operato
altrui senza muovere un dito?
GbC 12 Gen 2015 10:59
Il 10/01/2015 12:45, Federico ha scritto:
> Luca D ha scritto...
>> Negli ultimi 18 e passa anni non mi è mai successo che Line Input non
>> sia andato a buon fine in >un ******* di testo... oltretutto risolve da
>> solo sia la terminazione di linea CR che CRLF, cosa che con >lo
>> Split() va tenuta in considerazione
>
> Negli ultimi 33 (0 34 non ricordo bene, dev'essere l'età avanzata)...
> ...comunque da sempre utilizzo queste tecniche collaudate per operare
> sui files.
> Ognuno utilizza le tecniche che più preferisce.
> Comunque adesso sai indirettamente che può capitare... hai imparato una
> cosa nuova! ;)
> L'esempio che ho buttato giù l'ho scritto a braccio, è la prima cosa che
> mi è venuta in mente.
> Potresti buttare giù qualcosa anche tu, piuttosto che criticare
> l'operato altrui senza muovere un dito?
******* la sagra del guru :p

--
GbC
www.gbc.uno
GraVer68 12 Gen 2015 13:45
Il giorno lunedì 12 gennaio 2015 10:59:19 UTC+1, GbC ha scritto:
> Il 10/01/2015 12:45, Federico ha scritto:
>> Luca D ha scritto...
>>> Negli ultimi 18 e passa anni non mi è mai successo che Line Input non
>>> sia andato a buon fine in >un ******* di testo... oltretutto risolve da
>>> solo sia la terminazione di linea CR che CRLF, cosa che con >lo
>>> Split() va tenuta in considerazione
>>
>> Negli ultimi 33 (0 34 non ricordo bene, dev'essere l'età avanzata)...
>> ...comunque da sempre utilizzo queste tecniche collaudate per operare
>> sui files.
>> Ognuno utilizza le tecniche che più preferisce.
>> Comunque adesso sai indirettamente che può capitare... hai imparato una
>> cosa nuova! ;)
>> L'esempio che ho buttato giù l'ho scritto a braccio, è la prima cosa che
>> mi è venuta in mente.
>> Potresti buttare giù qualcosa anche tu, piuttosto che criticare
>> l'operato altrui senza muovere un dito?
>
> ******* la sagra del guru :p
>
> --
> GbC
> www.gbc.uno


Ragazzi! un sincero grazie a tutti... sempre splendidi i Gruppi...
Federico mi sembra abbia colto nel segno appieno.
Il problema e' che io programmavo fino a una 10na d'anni fa' in elementare BASIC
o batch DOS e in linguaggi script non meglio noti.

Questo codice che mi scrivi Federico, scusa l'ignoranza, richiede un compilatore
o e' gia' eseguibile? Riesco a crearlo in VB senza dover comperare licenze
costose da programmatori?

Scusate tanto davvero, ma rientrando in un settore da tanto tempo uscito, sto
cercando prima le informazioni basilari per improntare il progettino, che a mio
avviso non deve essere difficilissimo da realizzare.

Grazie a tutti comunque.
Gra
Luca D 12 Gen 2015 15:56
On Monday, January 12, 2015 at 1:45:28 PM UTC+1, GraVer68 wrote:
>
> Ragazzi! un sincero grazie a tutti... sempre splendidi i Gruppi...
> Federico mi sembra abbia colto nel segno appieno.
> Il problema e' che io programmavo fino a una 10na d'anni fa' in elementare
> BASIC o batch DOS e in linguaggi script non meglio noti.
>
> Questo codice che mi scrivi Federico, scusa l'ignoranza, richiede un
> compilatore o e' gia' eseguibile? Riesco a crearlo in VB senza dover
> comperare licenze costose da programmatori?

Visual Basic, in quanto ambiente di sviluppo e compilatore, richiede una licenza
commerciale... non è più supportato nè commercializzato, per cui potrebbe non
essere scontato riuscire a trovare una licenza valida di VB6 (ultima versione
disponibile)

Visual Basic.NET è l'erede in ambiente .NET, ed è disponibile in versione
'Express', utilizzabile gratuitamente anche a scopi commerciali; hai tutto
quello che serve ma il linguaggio è piuttosto diverso, e il codice di esempio
non compatibile così com'è

Se hai a disposizione Office, allora Visual basic For Application, integrato nei
vari moduli, è per la stragrande maggioranza compatibile con codice Visual
Basic "liscio"... l'esempio in questione dovrebbe andare al 100%, ma devi
distribuire lo script come parte di un documento Office di qualche tipo, e chi
lo usa deve avere a sua volta licenza Office; mi pare esistesse, un tempo, una
sorta di SDK per poter fare pacchetti autosufficenti, ma non ho idea se sia
ancora supportato e come funzioni.

L'interprete VBScript integrato nel S.O. è un'altra alternativa, e non richiede
nemmeno compilazione, basta creare un ******* .VBS con codice opportuno... la
sintassi è molto più vicina a quella di VB originale ma ha parecchi limiti
sulle funzionalità, specie se ti serve un'interfaccia utente.
Nello specifico, per quanto riguarda le funzioni di I/O su ******* la sintassi
non del tutto compatibile, per cui di nuovo l'esempio non è utilizzabile senza
adattamenti.

Infine, ci sono alternative non Microsoft, sia a pagamento che gratuite, per
ambienti di sviluppo basati su BASIC, con sintassi più o meno vicine a VB,
secondo i casi.

Tu, esattamente che devi fare? se ti è sufficente uno script "estemporaneo" per
il lavoro che chiedi, allora probabilmente la cosa più pratica è farlo in
VBS... crea un ******* con estensione .VBS col tuo editor di testo predefinito e
prova con un codice tipo questo:

Dim fso, f, i, myLine
Dim startPos, endPos

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\test.txt", 1)
i=0
Do While Not f.AtEndOfStream
myLine = f.ReadLine
i = i + 1
if i = 2 Then Exit Do
Loop
f.close

If Len(myLine) > 0 Then
startPos=Instr(myLine, "(")
endPos=InstrRev(myLine, ")")
End If
If endPos > startPos Then
fso.MoveFile "c:\test.txt", "c:\" & Mid(myLine, startPos+1, endPos-startPos-1)
& ".txt"
MsgBox "OK"
Else
MsgBox "Formato ******* non corretto."
End if
Luca D 13 Gen 2015 11:56
Il giorno martedì 13 gennaio 2015 11:40:37 UTC+1, Sauro ha scritto:

> Secondo me così non funziona per via
> della presenza di:
> O0028
>
> Sarà necessaria qualche modifica per
> determinare il testo tra parentesi.
>
Al di là dei vari "sanity checks" che chiaramente vanno aggiunti a qualsiasi
esempio, per funzionare, funziona... lui fa Split con delimitatore "(" della
stringa

O0028(CANNULA 100 MM)

con cui ottiene l'array

(0) = "O0028"
(1) = "CANNULA 100 MM)"

Prende il secondo elemento, indice 1, e con Replace toglie la parentesi in fondo

quindi, purchè la riga sia sempre in un formato congruente a quello (non ci
siano altre parentesi, non ci sia niente dopo la parentesi chiusa ecc...)
qualunque cosa ci sia prima della parentesi aperta è ininfluente
GraVer68 13 Gen 2015 15:51
Il giorno martedì 13 gennaio 2015 11:56:34 UTC+1, Luca D ha scritto:
> Il giorno martedì 13 gennaio 2015 11:40:37 UTC+1, Sauro ha scritto:
>
>> Secondo me così non funziona per via
>> della presenza di:
>> O0028
>>
>> Sarà necessaria qualche modifica per
>> determinare il testo tra parentesi.
>>
> Al di là dei vari "sanity checks" che chiaramente vanno aggiunti a qualsiasi
esempio, per funzionare, funziona... lui fa Split con delimitatore "(" della
stringa
>
> O0028(CANNULA 100 MM)
>
> con cui ottiene l'array
>
> (0) = "O0028"
> (1) = "CANNULA 100 MM)"
>
> Prende il secondo elemento, indice 1, e con Replace toglie la parentesi in
fondo
>
> quindi, purchè la riga sia sempre in un formato congruente a quello (non ci
siano altre parentesi, non ci sia niente dopo la parentesi chiusa ecc...)
qualunque cosa ci sia prima della parentesi aperta è ininfluente

Ragazzi per dovere di cronaca, annuncio di avere completato il progettino con
l'ausilio di AutoIt, funziona perfettamente!
Grazie molto per il supporto e l'attenzione dimostrata, siete grandi! ;)
Saluti,
Graziano

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.