Newsgroup: it.comp.lang.visual-basic
Titolo: Rendere minuscola una stringa: e i numeri romani?

Ciao a tutti,
scusate se mi intrometto così senza essermi mai presentato e senza avere
(quasi) mai postato, ma vi leggo praticamente quasi tutti i giorni e mi
sembra che sia il posto ideale per fare una domanda come quella che sto per
farvi:
io ho una stringa tutta in maiuscolo, il titolo di una canzone, che spesso
contiene anche numeri romani (per esempio: "PEZZI LIRICI: III LIBRO OP.43");
questa stringa la devo convertire in minuscolo, ma con le iniziali delle
parole maiuscole: dovrebbe diventare così "Pezzi Lirici: III Libro Op.43".
Il mio problema si prensenta quando ci sono appunto questi numeri romani che
non sono come identificare, visto che se li tratto come una parola il
risultato è "... Iii ...": una vera schifezza!
Qualcuno sa per caso suggerirmi un metodo che mi posso aiutare a rilevare la
presenza dei numeri romani e di conseguenza manternerli maiuscoli?
Grazie mille in anticipo per l'aiuto (sempre se arriverà)

 una parola il risultato è "... Iii ...": una vera schifezza!
In teoria ti potresti basare sul fatto che i numeri romani usano solo poche
lettere: "IVXLCM" e cercare le stringhe senza spazi in mezzo che le
contengono.
In pratica ti fregano alcuni casi dubbi, come ad esempio la lettera "I" che
può essere usata sia come "primo" in lettere romane, che come articolo in
italiano, oppure le particelle "vi" o "ci" o "mi" che hanno anch'esse
significato doppio.
Non vedo soluzioni per questi casi.
Ciao
*Roby*

lettere: "IVXLCM" 
anche "D"  :-)
Andrea. 

 anche "D"  :-)
Lo sapevo che non dovevo contraddire la seconda regola non scritta dei NG:
"Mai postare un elenco esaustivo di occorrenze, perchè quasi sicuramente ne
dimenticherai almeno una"
Ciao
*Roby*
P.S.
A dire il vero ho contraddetto anche la prima regola: "Mai postare per dire
che un problema non ha soluzione perchè, quasi sicuramente, qualcun altro
posterà una soluzione poco dopo". :-)

 presenza dei numeri romani e di conseguenza manternerli maiuscoli?
Prova questo (da adattare secondo varie esigenze):
Private Sub Form_Load()
    s = minuscolo("   PEZZI LIRICI:    III LIBRO IVTM IVM IvM (IvM)   OP.43
")
    Debug.Print s
End Sub
Function minuscolo(stringa_di_input)
'       Limitazioni:
'       Una parola che non indica un numero romano,
'       ma contiene solo sigle corrispondenti a numeri romani
'       (se maiuscole come dovrebbero essere),
'       viene messa tutta in maiuscolo
'       Varie ed eventuali ;-)
'       Assegno la stringa interna per non "sporcare" quella di input
'       Toglie eventuali spazi iniziali e finali
    stringa = Trim(stringa_di_input)
    nr = "IVXLCDM"    'Varie "sigle" per numeri romani
    crt_speciali = "|!" & Chr(34) & "£$%&/()=?^'*[+]簧@#;:_,.-><"  'Da
adeguare
'       Trasformo tutti gli eventuali doppi spazi in spazio singolo
    Do
        If InStr(stringa, Space(2)) = 0 Then Exit Do
        stringa = Replace(stringa, Space(2), Space(1))
    Loop
'       Ricavo tutte le "parole"
    parole = Split(stringa, Space(1))
    stringa_risultato = ""
    For n_parola = 0 To UBound(parole)
        parola = parole(n_parola)
'           Verifica se fatta tutta di numeri romani
        Do
            solo_romani = 0
            For c = 1 To Len(parola)
                If InStr(nr, Mid(parola, c, 1)) = 0 Then Exit Do
            Next c
            solo_romani = 1
            Exit Do
        Loop
        If solo_romani Then
'               Tutta di numeri romani - Maiuscolo
            parola = UCase(parola)
        Else
'               Non di solo romani - Prima (non speciale) maiuscola
            parola = LCase(parola)
            For c = 1 To Len(parola)
                If InStr(crt_speciali, Mid(parola, c, 1)) = 0 Then
                    Mid(parola, c, 1) = UCase(Mid(parola, c, 1))
                    Exit For
                End If
            Next c
        End If
        stringa_risultato = stringa_risultato & IIf(stringa_risultato = "",
"", Space(1)) & parola
    Next n_parola
    minuscolo = stringa_risultato
End Function


beh... moltuo buono direi, credo che dovrň adattarlo un attimo ad altre mie
esigenze nella conversione ma credo di essere abbastanza vicino alla
soluzione...
grazie a tutti e soprattutto a Lupo che ha saputo darmi una soluzione cosě
vicina alle mie esigenze... :-)
un saluto a tutto il NG

 parole maiuscole: dovrebbe diventare cosě "Pezzi Lirici: III Libro Op.43".
Se tu potessi gestire dei caratteri di escape basterebbe fare cosě:
Stringa = "Pezzi Lirici: \III Libro Op.43"
StringaArray() = Split(Stringa)
For i = 0 To ubound(StringaArray)
    if (Left$(StringaArray(i), 1) = "\") then
        NuovaStringa = NuovaStringa & Mid$(StringaArray(i), 2)
    Else
        NuovaStringa = NuovaStringa & StrConv(StringaArray(i), vbProperCase)
    End If
Next i
Insomma, basterebbe capire che quello č un numero e non una parola.
Ciao