estrarre parte di testo da una iproperties

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#1
Domandone, in un iproperties personalizzata scrivo un testo esempio 1111_PIPPO_PLUTO...esiste una funzione ilogic 0 altro pwer poter estrarre da quella scritta solo le ultime 5 lettere, più in generale, estarre da una testo,solo le alcune lettere?

grazie mille
 
Ultima modifica da un moderatore:

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#2
Se guardi a sx nella finestra di editing di iLogic vedi che c'è un browser (Frammenti/Sistema) e una delle voci è Stringhe. Scorrendo con il mouse sulle varie opzioni viene evidenziato cosa fa il comando.
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#3
Ciao
si puoi provare a creare un parametro di testo in Fx e lo fai compilare da ilogic con l'iproperties che vuoi
e poi puoi usare la stringa "split" "strSplit = Split" e metti tra " xx" il testo da tagliare.
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#4
ciao batleo...non capisco dove devi usare la stringa spit???? in ilogic o in fx...riesci a farmi un esempio grazie mille
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#5
ciao
eccomi siccome non ho molto tempo ti ho fatto un esempio
crea parmatri txt.JPG
dati iproperties.JPG
parmatri txt dopo regola.JPG

nome_parametro_di_testo =iProperties.Value("Project", "Description")
strSplit=Split(nome_parametro_di_testo,"pippo")
nome_TESTO_TAGLIATO= strSplit (0)

il testo " txt " è quello che taglia

ciao
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#6
grazie batleo...ma il noto che dal to esmpio..che ho provato e funziona...si cancella tutto quello che sta dopo al testo che che tagli...questo non va bene nel mio caso...io devo solo tagliare dei caratteri o numeri...secondo problema e che i numeri e i caratteri sono diversi per ogni descrizione...la cosa che nno cambia mai e la posizione, esempio AB 34 56 o 12 ER FG...quello che devo tagliare e sempre 1 primi 2 e gli ultimi 2 le 2 cifre centrali sono sempre diverse ma sempre loro da tenere
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#7
Ma hai risolto il problema originale o ti servono altre indicazioni? Non sono stato più preciso perchè mi pareva che l'help di iLogic fosse chiaro, ma se hai ancora dubbi chiedi.
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#8
non ho capito molto bene che cosa devi ottenere , ma
prova a cambiare la variabile
nome_TESTO_TAGLIATO= strSplit (0) --> (1) non mi ricordo quale sia la differenza ma dovrebbe cambiare qls.

Oppure prova a spiegare meglio che cosa vuoi ottenere , si può pensare ad un'altra strada , la mia era solo una proposta
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#9
cambiando da 0 a 1 prendo tutto quello che sta dopo al testo tagliato.

io devo poter estrarre un carattere o un numero da un testo...di cui l'unica cosa che e fissa e la posizione e il numero di caretteri...

es... abcd_32_ab devo estrarre ab finale altro sempio 1234_sl_78 devo estrarre 78, quandi da una codice composto da 4alfanumerici_2alfanumerici_2alfanumerici..devo astrarre sempre gli ultimi 2 caratteri della stringa
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#10
Ti posto un esempio banale ma davvero guarda dove ti ho indicato che è scritto in modo più chiaro di quanto so spiegarti io.

Codice:
Dim codice As String

codice = "123456789"

MessageBox.Show("Primi due caratteri di 123456789: " & Left(codice, 2))
MessageBox.Show("Ultimi due caratteri di 123456789: " & Right(codice, 2))
MessageBox.Show("3° e 4° carattere di 123456789: " & Mid(codice, 3,2))
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#11
immagino che il codice completo "abcd_32_ab" venga creato in automatico da altre regole o parametri , giusto?
o lo inserisci a mano?
Se fosse il caso che si auto compila puoi prendere la sorgente
esempio
Se "abcd_32_ab" è composto da d1+d56+d68 e ti serve solo "d68", puoi usare quello convertendolo in testo

Oppure come si compila il codice?
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#12
ciao catafratto ai ragione scusa...cmq grazie..io non ci capisco molto di ilogic...adesso appurato che si puo tirare fuori la parte di testo che serve...viene il difficile...io dev ofare questo lavoro da un assieme...e far compilare un iprorteties personalizzata per tutte le parti dell'assieme con le ultime 2 cifre della posto un immagine per capirci meglio


PROGRESSIVO.PNG

si può fare???
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#13
se hai trovato il modo di tirare fuori il dato che ti serve ora ti basta aggiungere la stringa

iProperties.Value("Custom", "PROGRESSIVO")= nome_parametro_di_testo --> il dato che ti serve
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#14
Questa compilazione avviene solo per le parti o anche per gli assiemi? Il numero di parte è univoco (intendo, non ci sono due file diversi con lo stesso numero di parte)?
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#15
sia per parti che assiemi...nello stesso assieme posso avere il finale 32 che e una parte e i lfinale 32 che e un assieme
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#16
ciao catafratto la mia risposta dei nomi non univoci ti ha scioccato???

non si può fare???
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2016
Regione: Veneto
#18
Prova questo su qualcosa di non vitale per te, a me pare funzioni ma non si può mai dire.

Codice:
' Aggiorna i numeri progressivi
Public Sub updatePROGRESSIVO()
    Dim oApp As Application
    Set oApp = ThisApplication
    
    Dim oDoc As Document
    Set oDoc = oApp.ActiveEditDocument
    
    Dim sPN As String
    sPN = readPartNumber(oDoc)
    
    Dim sCode As String
    Dim oRefDocs As Variant
    Dim oRefDoc As Document
    
    Call codeCreator(oDoc)
    
    ' Si collega ai documenti usati nell'assieme
    Set oRefDocs = oDoc.AllReferencedDocuments

    ' Aggiorna tutti i documenti collegati
    If oRefDocs.Count > 0 Then
        For Each oRefDoc In oRefDocs
            Call codeCreator(oRefDoc)
        Next
    End If

End Sub

Private Sub codeCreator(oDoc As Document)
    Dim sPN As String
    sPN = readPartNumber(oDoc)
    
    Dim sCode As String
    
    ' Se il Numero Parte è più lungo di due caratteri
    ' prende gli ultimi due caratteri e li copia nella iPropery personalizzata
    If Strings.Len(sPN) > 2 Then
        sCode = Strings.Right(sPN, 2)
    Else
        sCode = ""
    End If
    
    Call writeCustomProperties(oDoc, "PROGRESSIVO", sCode)
End Sub

Private Function readPartNumber(oDoc As Document) As String
    
        
    'Definisce vari set di proprietà: ---------------------------------------------------------------------
    Dim oPropSets As PropertySets
    Set oPropSets = oDoc.PropertySets
    
    'Design Tracking Proprieties
    Dim oDesignTrackingProprieties As PropertySet
    Set oDesignTrackingProprieties = oPropSets.Item("{32853F0F-3444-11d1-9E93-0060B03C1CA6}")
    
    readPartNumber = oDesignTrackingProprieties.ItemByPropId(kPartNumberDesignTrackingProperties).Value
    
End Function

Private Sub writeCustomProperties(oDoc As Document, sPropID As String, sPropValue As String)
    Dim oCustomPropSet   As PropertySet
    Set oCustomPropSet = oDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}")
    
    Dim bPropExist As Boolean
    bPropExist = False
    
    Dim oProp As Property
    Dim oCustomProp As Property
    
    For Each oProp In oCustomPropSet
        If oProp.Name = sPropID Then
            bPropExist = True
            Set oCustomProp = oProp
            Exit For
        End If
    Next
        
    If bPropExist = False Then
        Call oCustomPropSet.Add(sPropValue, sPropID)
    Else
        oCustomProp.Value = sPropValue
    End If
End Sub
Non è iLogic, è VBA: se cerchi nel forum trovi come e dove copiare tutto, è stato scritto un po' di volte ormai
 

MARCOC

Utente Standard
Professione: disegnatore
Software: autocad-inv2015-solid2015
Regione: piemonte
#19
grazie catafratto...provo ad utilizzarlo poi di dico...mi piacerebbe capirci un pò di più di vba...

grazie ancora
 

batleo

Utente Junior
Professione: disegnatore
Software: inventor
Regione: Piemonte
#20
Ciao Catafratto
ora avrei una domanda pure io xkè VBA non lo conosco ,
negli assiemi che creo, i codici vengono composti da "0000-00 descrizione" ovvero 4 cifre - 2 cifre e descrizione che prende dal nome del file quando salvo, io vorrei automatizzare il processo per trasformare il Num Parte in "0000/00" ( la "/" mi serve per il gestionale non lo accetta nel nome file ma si nel numero parte), prendere la descrizione e spostarla nella voce description delle iproperties, è fattibile?
Per ora ho quasi trovato una soluzione per le parti con ilogic , ma negli assiemi non funziona perchè i nomi cambiano sempre , mi puoi aiutare?