# Come leggere un .asm Creo per dedurne i componenti Il file `.asm` di Pro/ENGINEER-Creo è un formato binario proprietario, non documentato pubblicamente. Non esiste un parser strutturale completo in questo progetto: l'estrazione dei componenti si basa su un'euristica testuale, validata a mano confrontando l'output con l'albero reale mostrato da Creo. Questo documento riassume cosa si è osservato e i suoi limiti. ## Struttura osservata Il file contiene, frammentate tra dati binari, molte coppie testuali del tipo ``` \x00\x00 ``` in encoding a 1 byte per carattere (Latin1/ASCII), es.: ``` 6d 6f 64 65 6c 5f 6e 61 6d 65 00 39 30 34 34 32 30 37 30 36 31 5f 43 30 31 23 41 46 30 00 m o d e l _ n a m e \0 9 0 4 4 2 0 7 0 6 1 _ C 0 1 # A F 0 \0 ``` I codici dei componenti (propri e sotto-componenti) compaiono come stringhe ASCII leggibili in diversi campi ricorrenti: - `model_name`, `generic_name`, `inst_name`, `gen_name`, `feat_name`, `family_name`, `name` — metadati associati a un modello referenziato. - `Componente ID N (.PRT|.ASM)` — riga di placement: `N` è un ID progressivo assegnato da Creo al componente posizionato nell'assieme. - `#AF0` — riferimento con suffisso di versione/configurazione. Un codice reale compare **più volte** nel file (una per feature/placement diverso); rumore binario che assomiglia casualmente a un codice compare quasi sempre una sola volta. Questa è la base del filtro in [`AssemblyComponentScanner.cs`](../CadSearchGui/AssemblyComponentScanner.cs) e in [`scripts/ExtractCreoStrings.cs`](../scripts/ExtractCreoStrings.cs): ``` regex: \b\d{8,12}(?:_[A-Za-z]\d{2,4}|[A-Za-z]{0,2})\b occorrenze: >= 2 ``` ## Falsi positivi noti **ID di viste salvate.** Il pattern `ModelView#` (es. `ModelView#1073741828`) genera candidati a 10 cifre indistinguibili da un codice reale per forma, ma sono ID interni di viste orientate salvate, non componenti. Si escludono con un lookbehind negativo sulla regex: `(?