Excel e gli applicativi Microsoft Office Sfida di inizio Estate: estrai le iniziali

Login Registrati
Stai vedendo 12 articoli - dal 26 a 37 (di 37 totali)
  • Autore
    Articoli
  • #48402 Score: 0 | Risposta

    gianfranco55
    Partecipante
      91 pts

      solo per curiosità

      questa funziona dal 2016 in poi  ( solo per il CONCAT()) ma ha il limite dei caratteri

      =SE($A1<>"";CONCAT(MAIUSC(SINISTRA(FILTRO.XML("<d>"&SOSTITUISCI(SOSTITUISCI(MINUSC(SOSTITUISCI(A1;"'";" "));"'";" ");" ";"")&"</d>";"//a[string-length()>2][(.!='con') and (.!='per') and (.!='tra') and (.!='fra') and (.!='del') and (.!='dello') and (.!='della') and (.!='dell') and (.!='dei') and (.!='degli') and (.!='delle') and (.!='allo') and (.!='alla') and (.!='dall')]");1)));"")

      onestamente mi sono fatto aiutare da Terio per la parte da eliminare sperando di poter

      semplificare la cosa ma ad oggi così si fa.

      ho eliminato tutte le parole sotto i tre caratteri meno variabili  

      #48403 Score: 0 | Risposta

      scossa
      Partecipante
        37 pts

        gianfranco55 ha scritto:

        solo per curiosità

        Non posso provarla, ma Automobil Club d'italia te lo restituisce correttamente (ACI)?

        #48404 Score: 0 | Risposta

        gianfranco55
        Partecipante
          91 pts

          ciao

          certo ho sostituito l'apostrofo con uno spazio

          Automobil Club d'italia  ----ACI

           

          #48405 Score: 0 | Risposta

          scossa
          Partecipante
            37 pts

            gianfranco55 ha scritto:

            certo ho sostituito l'apostrofo con uno spazio

            #48407 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              272 pts

              Bisognerebbe creare una sezione apposita per "Gianfranco il Formulaio Magico"   

              #48409 Score: 0 | Risposta

              gianfranco55
              Partecipante
                91 pts

                ciao

                vecchio trentino

                come già detto in questa formula mi ha aiutato molto Eleuterio

                la mia sarebbe stata più lunga nella parte dove escludiamo preposizioni e congiunzioni

                (una bella scremata c'è eliminando le parole sotto le due lettere)

                con FILTRO.XML siamo partiti prendendoci per il xxxx io e Terio

                poi piano piano si è scoperto che è una formula che è portentosa

                per la gestione delle stringhe e non abbiamo ancora finito di imparare

                ad utilizzarla.

                certo ha i suoi limiti ma per uno che ha versioni vecchie è fantastica

                e parte da 2013

                #48414 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  gianfranco55 ha scritto:

                  con FILTRO.XML siamo partiti prendendoci per il xxxx io e Terio

                  Crudo ma onesto   

                  gianfranco55 ha scritto:

                  certo ha i suoi limiti ma per uno che ha versioni vecchie è fantastica

                  Ad avere tempo e pazienza   

                  #48415 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    272 pts

                    Comunque vi lascio il mio tentativo. Ho utilizzato le espressioni regolari.

                    Option Explicit
                    
                    Function initials(s As String) As String
                    Dim e As String
                    Dim p As String
                    Dim t As String
                    Dim re As Object
                    Dim oMatch As Object
                    Dim oMatches As Object
                        
                        e = "di|a|da|in|con|su|per|tra|fra|del|dello|della|dei|degli|delle|" & _
                            "al|allo|alla|ai|agli|alle|dal|dallo|dalla|dai|dagli|dalle|nel|nello|" & _
                            "nella|nei|negli|nelle|col|coi|sul|sulla|sui|sugli|sulle|il|lo|la|i|gli|le|" & _
                            "un|uno|una|l'|d'"
                            
                        p = "(?:(?:\b(?:%e)\b(?:\W(?:%e)\b)*))"
                        p = Replace(p, "%e", e)
                    
                        Set re = CreateObject("VBScript.RegExp")
                        With re
                            .ignorecase = True
                            .Global = True
                            .Pattern = p
                        End With
                        
                        'elimina dalla stringa le parole da escludere
                        t = re.Replace(s, "")
                        
                        'considera solo le iniziali delle parole restanti
                        re.Pattern = "\b\w"
                    
                        'recupera i singoli gruppi di parole restanti
                        p = ""
                        Set oMatches = re.Execute(t)
                        For Each oMatch In oMatches
                            p = p & oMatch
                        Next
                    
                        'restituisce il risultato in MAIUSCOLO
                        initials = UCase$(p)
                        
                    End Function

                    Test: ?initials("C'è un gatto che prova a volare sul nido d'uccellino, là su quell'albero")

                    Result: CGCPVNULQA

                    Sarebbe interessante la statistica di scossa sulle sue ventimila e passa righe di test. Ma penso che sara' abbastanza lenta perche' c'e' il collo di bottiglia del For Each finale. Se fossi riuscito a fare il contrario, cioe' ricavare le parole senza l'iniziale, invece di ricavare la colllction delle sole iniziali, avrei operato una sostituzione sul posto e sarebbe stato velocissimo.

                    #48416 Score: 0 | Risposta

                    gianfranco55
                    Partecipante
                      91 pts

                      ciao

                      mi sai dire perchè lasci la vocali E O U

                      magari U non serve ma E-O vengono spesso usate come congiunzioni

                      non ti conviene eliminare tutte le parole inferiori alle tre lettere?

                      andiamo o a Milano o a roma..........AOMOR
                      andiamo a Milano e a roma.............AMER

                      #48417 Score: 0 | Risposta

                      scossa
                      Partecipante
                        37 pts

                        vecchio frac ha scritto:

                        Sarebbe interessante la statistica di scossa sulle sue ventimila e passa righe di test.

                        Eccola (non capisco perché oggi il mio pc sia ancora più lento del solito):

                        EstraiIniziali_alfrimpa, finito in: 7,23468440478587
                        ACRONIMO_ercolini, finito in: 5,14825958933261
                        Initials_VF, finito in: 80,7102357120998
                        Acronimo_scossa, finito in: 1,40821698873697

                         

                        vecchio frac ha scritto:

                        penso che sara' abbastanza lenta perche' c'e' il collo di bottiglia del For Each finale.

                        Ho rifatto il test escludento il ciclo finale:

                         

                            Set oMatches = re.Execute(t)
                        '    For Each oMatch In oMatches
                        '        p = p & oMatch
                        '    Next

                        ma non è certo quello il collo di bottiglia:

                        EstraiIniziali_alfrimpa, finito in: 7,17447817535844
                        ACRONIMO_ercolini, finito in: 5,12802710539859
                        Initials_VF, finito in: 79,5
                        Acronimo_scossa, finito in: 1,39518956611937

                        commentando anche il Set:

                        '    Set oMatches = re.Execute(t)
                        '    For Each oMatch In oMatches
                        '        p = p & oMatch
                        '    Next

                        si risparmia  qualcosa ma niente di drastico:

                        EstraiIniziali_alfrimpa, finito in: 7,23648881897634
                        ACRONIMO_ercolini, finito in: 5,18076516864858
                        Initials_VF, finito in: 77,716792807721
                        Acronimo_scossa, finito in: 1,39987740433071

                         Comunque c'è qualcosa che non mi quadra in alcuni risultati rispetto alle esclusioni (cit.: "ma il verbo andare non dovrebbe essere escluso"): in "C'è un gatto che prova a volare sul nido d'uccellino, là su quell'albero" (*) -> CGCPVNULQA escludi il verbo essere: (è); poi con "società anonima dell'excel" restitusce SADE.

                        (*) la mia restitusce CÈGCPVNULQA ma se la è non vanno considerata basta aggiungerla ("#è#") alle escluse.

                        #48418 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          Eh infatti non e' per niente perfetta. Le espressioni regolari mi intrigano ma sono abbastanza complicate e comunque risultano lente come evidenziato. Il punto del verbo essere e' un buon test infatti.

                          gianfranco55 ha scritto:

                          non ti conviene eliminare tutte le parole inferiori alle tre lettere?

                          Abbiamo pur troppo ben piu' che poche parole tal che si dia luogo ad esclusioni (ecco: in questa frase solo "ad" andrebbe esclusa tra le parole di tre lettere o meno)

                          #48614 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            Sono passati dieci giorni... chiudiamo questa sfida con un ringraziamento a tutti i partecipanti!

                            Non c'e' un vincitore... e' stato interessante il concorso di tutti!

                            Alla prossima   

                          Login Registrati
                          Stai vedendo 12 articoli - dal 26 a 37 (di 37 totali)
                          Rispondi a: Sfida di inizio Estate: estrai le iniziali
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: