+ Rispondi al Thread
Pagina 2 di 3 primaprima 123 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22

Discussione: Maiuscolo e minuscolo dopo il punto

  1. #11
    L'avatar di Carmen
    Carmen non è in linea Scribacchino
    Luogo
    Italy
    Post
    837
    Quote Originariamente inviato da sspintux Visualizza il messaggio
    cioè ? stai chiedendo un esempio sulle seguenti istruzioni in vbscript:
    - split
    - join o in alternativa il ciclo for
    - ucase
    e qualche if per gestire i casi particolari ?

    ...qui trovi qualcosa

    VbScript Array Join Function
    Devo semplicemente scrivere una stringa tutta in minuscolo tranne le iniziali dopo il punt (.)

    Es. Oggi e una bella giornata. Speriamo anche domani. Ciao
    Carmen!

  2. #12
    L'avatar di Carmen
    Carmen non è in linea Scribacchino
    Luogo
    Italy
    Post
    837
    Avevo trovato questa funzione

    codice:
    function prova(stringa)
    elementiStringa = split(stringa , ".")
    for i = 0 to uBound(elementiStringa)
    response.write uCase(left(elementiStringa(i),1)) & lCase(mid(elementiStringa(i),2)) & "."
    next
    end function
    Funziona, però, se il punto è preceduto da uno spazio non mi scrive l'iniziale in maiuscolo
    Carmen!

  3. #13
    Luogo
    Lazio
    Post
    1,597
    Blogs
    21
    Quote Originariamente inviato da Carmen Visualizza il messaggio
    Avevo trovato questa funzione

    codice:
    function prova(stringa)
    elementiStringa = split(stringa , ".")
    for i = 0 to uBound(elementiStringa)
    response.write uCase(left(elementiStringa(i),1)) & lCase(mid(elementiStringa(i),2)) & "."
    next
    end function
    Funziona, però, se il punto è preceduto da uno spazio non mi scrive l'iniziale in maiuscolo
    a me sembra che non funzioni se è seguito da uno spazio;
    ma potrebbe esserci anche un "a capo".
    Basta scorrere fino a trovare il primo carattere diverso da...

    In alternativa puoi provare a modificare questa (che non ho provato!) secondo le tue esigenze

    r: Maiuscolo iniziale migliorato
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  4. #14
    Luogo
    BS / MI
    Post
    1,608
    Blogs
    33
    Quote Originariamente inviato da Carmen Visualizza il messaggio
    Da errore su questa linea: Mid(strInput, i, 1) = UCase(Ch)

    Crado che manchi qualcosa
    Eh, maledetto VBScript...

    A questo punto credo di aver riparato tutte le differenze con VB6 :

    codice:
    Function SentenceCase(strInput As String) As String
    
        Dim i As Long
        Dim bCap As Boolean
        Dim Ch As String
        
        strInput = LCase(strInput)
        bCap = True
        
        For i = 1 To Len(strInput)
        
            Ch = Mid(strInput, i, 1)
            
            '-- a-z : separated and put on top as happens more often
            If AscW(Ch) >= 97 And AscW(Ch) <= 122 Then
                If bCap Then
                    strInput = Mid(strInput, 1, i - 1) & UCase(Ch) & Mid(strInput, i + 1, Len(strInput) - i)
                    bCap = False
                End If
                '-- sentence terminators ! . ? Lf Cr
                ElseIf (AscW(Ch) = 33 Or AscW(Ch) = 46 Or AscW(Ch) = 63 Or AscW(Ch) = 10 Or AscW(Ch) = 13) Then
                    bCap = True
                '-- space, non-break space, tab
                ElseIf (AscW(Ch) = 32 Or AscW(Ch) = 160 Or AscW(Ch) = 9) Then
                '-- closing quotes or brackets
                ElseIf (AscW(Ch) = 34 Or AscW(Ch) = 41 Or AscW(Ch) = 93 Or AscW(Ch) = 125 Or AscW(Ch) = 148) Then
                '-- other chars between 0-127
                ElseIf (AscW(Ch) < 128) Then
                    If bCap Then bCap = False
                '-- Extended-Ascii (128-255) or Unicode (> 255)
                Else
                    If bCap Then
                        If StrComp(Ch, UCase(Ch), vbBinaryCompare) <> 0 Then
                            '-- a letter that has uppercase.
                            strInput = Mid(strInput, 1, i - 1) & UCase(Ch) & Mid(strInput, i + 1, Len(strInput) - i)
                        End If
                        bCap = False
                    End If
            End If
           
        Next
        
        SentenceCase = strInput
           
    End Function
    Faccio notare che questa Function si occupa anche degli a-capo e altri segni di interpunzione che determinano il Maiuscolo successivo. Inoltre risolve il problema dello spazio e non-spazio dopo il punto. Quindi come si dice : nel più sta il meno...
    Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
    Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]

  5. #15
    Luogo
    Lazio
    Post
    1,597
    Blogs
    21
    Quote Originariamente inviato da MarcoGG Visualizza il messaggio
    ....
    Faccio notare che questa Function si occupa anche degli a-capo e altri segni di interpunzione che determinano il Maiuscolo successivo. Inoltre risolve il problema dello spazio e non-spazio dopo il punto. Quindi come si dice : nel più sta il meno...
    Come già detto non l'ho provata ma mi sembra carina, e probabilmente
    anche più performante , la soluzione basata sulle regular expression
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  6. #16
    L'avatar di Carmen
    Carmen non è in linea Scribacchino
    Luogo
    Italy
    Post
    837
    Ciao, Perdonate l'assenza...

    Allora, facciamo il punto della situazione. Per quanto riguarda l'uso della "regular expression" come indicato da sspintux, non mi funziona in quanto sembra una funzione x VBA.

    Mentre l'ultima "relase" di MarcoGG adesso sembra funzionare, anche se devo dire a MarcoGG che questa stringa in ASP non va bene

    codice:
    'non funziona
    Function SentenceCase(strInput As String) As String
    
    'funziona
    Function SentenceCase(strInput)
    
    
    'nemmeno questi sono corretti (vanno bene in VB6)
    Dim i As Long
    Dim bCap As Boolean
    Dim Ch As String
    Adesso mi viene ovviamente un dubbio riguarda le performance. Siccome solitamente la stringa che dovrà essere passata all funzione contiene spesso e volentieri parecchi caratteri come ad esempio 1000/2000 etc... la velocità come sarà???
    Carmen!

  7. #17
    Luogo
    Lazio
    Post
    1,597
    Blogs
    21
    Quote Originariamente inviato da Carmen Visualizza il messaggio
    ......
    Per quanto riguarda l'uso della "regular expression" come indicato da sspintux, non mi funziona in quanto sembra una funzione x VBA.
    ...
    Non sembra... E' per VBA tanto che parla espressamente di excel;
    come ti avevo già detto devi adattarla al VbScript di asp.
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  8. #18
    L'avatar di Carmen
    Carmen non è in linea Scribacchino
    Luogo
    Italy
    Post
    837
    Quote Originariamente inviato da MarcoGG Visualizza il messaggio
    Eh, maledetto VBScript...

    A questo punto credo di aver riparato tutte le differenze con VB6 :

    codice:
    Function SentenceCase(strInput As String) As String
    
        Dim i As Long
        Dim bCap As Boolean
        Dim Ch As String
        
        strInput = LCase(strInput)
        bCap = True
        
        For i = 1 To Len(strInput)
        
            Ch = Mid(strInput, i, 1)
            
            '-- a-z : separated and put on top as happens more often
            If AscW(Ch) >= 97 And AscW(Ch) <= 122 Then
                If bCap Then
                    strInput = Mid(strInput, 1, i - 1) & UCase(Ch) & Mid(strInput, i + 1, Len(strInput) - i)
                    bCap = False
                End If
                '-- sentence terminators ! . ? Lf Cr
                ElseIf (AscW(Ch) = 33 Or AscW(Ch) = 46 Or AscW(Ch) = 63 Or AscW(Ch) = 10 Or AscW(Ch) = 13) Then
                    bCap = True
                '-- space, non-break space, tab
                ElseIf (AscW(Ch) = 32 Or AscW(Ch) = 160 Or AscW(Ch) = 9) Then
                '-- closing quotes or brackets
                ElseIf (AscW(Ch) = 34 Or AscW(Ch) = 41 Or AscW(Ch) = 93 Or AscW(Ch) = 125 Or AscW(Ch) = 148) Then
                '-- other chars between 0-127
                ElseIf (AscW(Ch) < 128) Then
                    If bCap Then bCap = False
                '-- Extended-Ascii (128-255) or Unicode (> 255)
                Else
                    If bCap Then
                        If StrComp(Ch, UCase(Ch), vbBinaryCompare) <> 0 Then
                            '-- a letter that has uppercase.
                            strInput = Mid(strInput, 1, i - 1) & UCase(Ch) & Mid(strInput, i + 1, Len(strInput) - i)
                        End If
                        bCap = False
                    End If
            End If
           
        Next
        
        SentenceCase = strInput
           
    End Function
    Faccio notare che questa Function si occupa anche degli a-capo e altri segni di interpunzione che determinano il Maiuscolo successivo. Inoltre risolve il problema dello spazio e non-spazio dopo il punto. Quindi come si dice : nel più sta il meno...
    Ciao, Perdonami, ma, la prima lettera della stringa non risulta maiuscola ma minuscola.??
    Carmen!

  9. #19
    Luogo
    BS / MI
    Post
    1,608
    Blogs
    33
    Quote Originariamente inviato da Carmen Visualizza il messaggio
    Mentre l'ultima "relase" di MarcoGG adesso sembra funzionare, anche se devo dire a MarcoGG che questa stringa in ASP non va bene

    codice:
    'non funziona
    Function SentenceCase(strInput As String) As String
    
    'funziona
    Function SentenceCase(strInput)
    
    'nemmeno questi sono corretti (vanno bene in VB6)
    Dim i As Long
    Dim bCap As Boolean
    Dim Ch As String
    Adesso mi viene ovviamente un dubbio riguarda le performance. Siccome solitamente la stringa che dovrà essere passata alla funzione contiene spesso e volentieri parecchi caratteri come ad esempio 1000/2000 etc... la velocità come sarà???
    Infatti, come già detto si tratta di una Function VB6 riadattata allo scopo.
    Le mie reminiscenze di VBScript ( che detestavo, giusto per la cronaca ) purtroppo non solo tali da individuare al volo tutte le differenze ( per lo più difetti e mancanze ) rispetto a VB6.
    Perciò lascio a te il piacere...
    In ogni caso la "mia" Function, con le dovute modifiche funziona.

    La Function con la Regex può essere una valida alternativa ( una volta testato che esegua davvero tutte le operazioni della Function di cui sopra ).
    Per la Funzione "VBA.StrConv(v(i), vbUpperCase)", che sinceramente non mi spiego, visto che manca il terzo parametro opzionale, alla fine della fiera è equivalente a fare una UCase() sullo stesso elemento dell'array v().
    Ho modificato quella Function perchè così com'è a quanto pare non funziona come dovrebbe.
    Così sembra perfetta. Testata su VB6 ok.
    Lascio a te il renderla VBScript-compliant :

    codice:
    Function MaiuscInizVBScript(ByVal s As String) As String
    
        Dim v, i As Long
        Dim strOutput As String
        strOutput = LCase(s)
        Dim re As Object
        Set re = CreateObject("vbscript.regexp")
        re.Pattern = "(^|[.!?]\b|[.!?]\s+\b|\r\b|\f\b|\n\b)(.)"
        re.Global = True
        strOutput = re.Replace(strOutput, "$1§$2§")
        v = Split(strOutput, "§", , vbTextCompare)
        For i = 1 To UBound(v) Step 2
            v(i) = UCase(v(i))
        Next i
        MaiuscInizVBScript = Join(v, "")
    
    End Function
    A questo punto hai almeno un paio di soluzioni valide.
    Per il discorso prestazionale credo si possa prevedere che la seconda sarà più performante, senza bisogno di grandi test.
    Prova...
    Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
    Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]

  10. #20
    Luogo
    BS / MI
    Post
    1,608
    Blogs
    33
    Quote Originariamente inviato da Carmen Visualizza il messaggio
    Ciao, Perdonami, ma, la prima lettera della stringa non risulta maiuscola ma minuscola.??
    Non mi risulta.
    Ho fatto qualche test, ad esempio :
    codice:
    "una funZIONe cHe. siA iN graDo?di CORREGGERE " & vbCrLf & _
    "questo TEsto ! di prova..."
    Non noto nulla di strano. una diventa Una e il resto viene modificato correttamente...
    Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
    Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]

+ Rispondi al Thread
Pagina 2 di 3 primaprima 123 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi