13/03/14 13:10
yaroze61
Una funzione che fa più o meno questa cosa, l'ho fatta!!! Ha dei limiti, funzionando sempre sul calcolo della metà della stringa, piramidale, la stringa risultante a volte non è ottimizzata. La funzione che ho fatto non calcola il secondo livello di parentesi. Si potrebbe utilizzare la ricorsività, ma non so come fare...
Basterebbe un'idea....
Grazieeeeeeeeee
Basterebbe un'idea....
Grazieeeeeeeeee
aaa
13/03/14 13:20
Postato originariamente da yaroze61:
Ciao,
dai ho sbagliato a scrivere 'Riduzione di una stringa'
Ciao,
dai ho sbagliato a scrivere 'Riduzione di una stringa'
Sì ma hai scritto
"ho una strina di questo tipo"
a questo punto penso che ti manchi la g nella tastiera ...
Non c'è nessun bisogno della ricorsività ma prova a mostrare la tua funzione e ne parliamo ...
13/03/14 14:55
yaroze61
Allora entriamo nel serio della funzione:
la mia stringa iniziale è: 1C1D1A1B1A1B1A1B1A1B
Il valore 1 prima della lettera indica quante colte è ripetuta la lettera, per usare la mia funzione converto la mia stringa in: 0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B
la stringa di uscita dalla mia funzione sarà:
1C1D
4(1A1B)
ma se io raddoppio la stringa iniziale: 1C1D1A1B1A1B1A1B1A1B1C1D1A1B1A1B1A1B1A1B la converto come sopra, la stringa di uscita sarà:
2(1C1D1A1B1A1B1A1B1A1B)
invece sarebbe più corretto: 2(1C1D4(1A1B)))
Spero di essere stato chiaro, ecco il codice:
Ingresso: sNota = 0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B
Uscita: CompattaStringa = 1C1D
4(1A1B)
la mia stringa iniziale è: 1C1D1A1B1A1B1A1B1A1B
Il valore 1 prima della lettera indica quante colte è ripetuta la lettera, per usare la mia funzione converto la mia stringa in: 0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B
la stringa di uscita dalla mia funzione sarà:
1C1D
4(1A1B)
ma se io raddoppio la stringa iniziale: 1C1D1A1B1A1B1A1B1A1B1C1D1A1B1A1B1A1B1A1B la converto come sopra, la stringa di uscita sarà:
2(1C1D1A1B1A1B1A1B1A1B)
invece sarebbe più corretto: 2(1C1D4(1A1B)))
Spero di essere stato chiaro, ecco il codice:
Ingresso: sNota = 0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B
Uscita: CompattaStringa = 1C1D
4(1A1B)
Public Function CompattaStringa(ByVal sNota As String) As String Dim sNewRigaNot As String Dim fValue As Single Dim sRiga As String Dim sRgNota As String Dim bFind As Boolean Dim fIncr As Single Dim fConta As Single Dim sNotaCalcolata As String Dim sNoRip As String Dim lPos1 As Long Dim lPos2 As Long Dim fId As Single Dim fVolte As Single Dim sNume As String Dim fIncremento As Single Dim sParte As String fIncremento = 5 sRgNota = sNota & Space$(fIncremento) sRiga = "" fConta = 1 fIncr = fIncremento Do Do If Mid$(sRgNota, 1, fIncr) = Mid$(sRgNota, (fConta * fIncremento) + 1, fIncr) Then bFind = True Else fIncr = fIncr + fIncremento fConta = fConta + 1 End If Loop Until fIncr > Int((Len(sRgNota)) / 2) Or bFind If bFind = False Then sParte = Mid$(sRgNota, 1, fIncremento) sNoRip = sNoRip & CStr(Val(Left(sParte, 4))) & Right$(sParte, 1) sRgNota = Mid$(sRgNota, fIncremento + 1) End If If bFind And Len(sNoRip) <> 0 Then sNotaCalcolata = sNotaCalcolata & sNoRip & vbCrLf sNoRip = "" End If If bFind Then sRiga = Left(sRgNota, fIncr) fVolte = 1 Do fVolte = fVolte + 1 Loop Until Mid$(sRgNota, (fVolte * fIncr) + 1, fIncr) <> sRiga sRgNota = Mid$(sRgNota, (fVolte * fIncr) + 1) sNume = sRiga sRiga = "" For fId = gnControllo To Len(sNume) - 1 Step fIncremento sParte = Mid$(sNume, fId + 1, fIncremento) sRiga = sRiga & CStr(Val(Left(sParte, 4))) & Right$(sParte, 1) Next sNotaCalcolata = sNotaCalcolata & CStr(fVolte) & "(" & sRiga & ")" & vbCrLf End If fIncr = fIncremento bFind = False fConta = 1 Loop Until StrClean(sRgNota) = "" If Len(sNoRip) <> 0 Then sNotaCalcolata = sNotaCalcolata & sNoRip & vbCrLf sNoRip = "" End If CompattaStringa = sNotaCalcolata End Function
aaa
16/03/14 21:45
yaroze61
Ciaooo,
capisco la difficoltà, ma possibile che nessuno abbia una idea, non chiedo il codice, bhe se ci fosse meglio, ma una piccola idea per lo sviluppo. Devo risolvero questo problema per fine settimana...
Grazieeeeeeeeeeeeeeeeeeeee
capisco la difficoltà, ma possibile che nessuno abbia una idea, non chiedo il codice, bhe se ci fosse meglio, ma una piccola idea per lo sviluppo. Devo risolvero questo problema per fine settimana...
Grazieeeeeeeeeeeeeeeeeeeee
aaa