..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Šifriranje preglednice

Pomoč pri delu s programom Calc

Šifriranje preglednice

OdgovorNapisal/-a Ace » Po jan 28, 2008 6:59 pm

Pozdravljeni!

Imam en problem pri šifriranju preglednice, šifrira mi vredi, ko pa hočem dešifrirat pa mi javi napako v: A = Asc(znak).

Preizkušam funkcijo SifrirajCelico
Napaka pri klicanju funkcije SifrirajCelico: Neveljaven klic procedure.


Moram pa napisat makro, ki bo šifriral/dešifriral aktivno območje celic preglednice. Za šifriranje oz. dešifriranje moram vnest geslo iz katerega bom najprej izračunal zrno za generator naključnih števil. Celice moram šifrirat z operacijo XOR. Šifrirat je treba vrednosti celic in enačbe (pazit moramo da bodo ustvarjeni samo znaki ASCII med 32 in 127).

Moram pa imeti 2 funkciji (SifrirajCelico, GesloVZrno) in 2 podprograma (SifrirajList in Main).



Koda: Izberi vse
Function  SifrirajCelico(Celica$, Zrno, Znacka$)   ' Znacka$ = "ZNACKA", Celica$ = vrednost/formula, Zrno = Zrno

Dim kodirano, znak As String
Dim i, dolzinaZnacke, dolzinaCelice As Integer

kodirano = ""

Randomize(Zrno)

dolzinaZnacke = Len(Znacka$)
dolzinaCelice = Len(Celica$)

If (Left(Celica$,1) = "=") Or (Left(Celica$,1) = "+") Or (Left(Celica$,1) = "-") Then
   Celica$ = Znacka$ + Celica$   ' Na začetek niza Celica$ vstavimo niz Znacka$
   kodirano = Znacka$   ' Na začetek vstavimo značko
   
   For i = dolzinaZnacke + 1 To dolzinaCelice   ' Za vsak znak celice od zadnjega znaka v nizu Znacka$
      znak = Mid(Celica$,i,1)   ' Vzamemo trenutni znak
      A = Asc(znak)   ' Znak pretvorimo v ascii kodo in shranimo v A
      If (A > 31) And (A < 128) Then
            B = CInt(rnd()*31)
            A = A XOR B
            rezultat = Chr(A)
            kodirano = kodirano + rezultat   
      Else
         kodirano = kodirano + znak   ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
      End If
   Next i
   
Else If (Left(Celica$,dolzinaZnacke)) = Znacka$ Then   ' V primeru da se na začetku niza Celica$ nahaja značka; Funkcija Left vrne levi del niza Celica$ z dolžino Značka$
   Celica$ = Right(Celica$,(dolzinaCelice - dolzinaZnacke))   ' Niz, ki predstavlja značko se vzame iz Celica$; Funkcija Right vrne desni del niza Celica$ velikosti dolžina celice minus dolžina značke 
   For i = 1 To dolzinaCelice   ' Za vsak znak v celici
      znak = Mid(Celica$,i,1) ' Vzamemo trenutni znak
      A = Asc(znak)   ' Znak pretvorimo v ascii kodo in shranimo v A
      If (A > 31) And (A < 128) Then
            B = CInt(rnd()*31)
            A = A XOR B
            rezultat = Chr(A)
            kodirano = kodirano + rezultat   
      Else
         kodirano = kodirano + znak   ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
      End If
   Next i

Else
   For i = 1 To dolzinaCelice   ' Za vsak znak v celici
      znak = Mid(Celica$,i,1)   ' Vzamemo trenutni znak
      A = Asc(znak)   ' Znak pretvorimo v ascii kodo in shranimo v A
      If (A > 31) And (A < 128) Then
            B = CInt(rnd()*31)
            A = A XOR B
            rezultat = Chr(A)
            kodirano = kodirano + rezultat   
      Else
         kodirano = kodirano + znak   ' Če je posebni znak (šumniki,..) ga ne de/kodiramo
      End If
   Next i
  End If
End If
SifrirajCelico = kodirano
      
End Function
[/quote]

Hvala, Jani
Ace
 
Prispevkov: 2
Pridružen: Če dec 20, 2007 3:56 pm
Kraj: Maribor



Matjazev.NET
 

OdgovorNapisal/-a admin » Po jan 28, 2008 8:20 pm

Da se ne spuščam predaleč :)...

  1. Ne razumem kakšen pomen naj bi imela značka... A pustiva to.
  2. Če že to značko tlačite v niz potem mora for zanka teči pač od prvega znaka celice, ki se sedaj nahaja na mestu (dolžinaZnačke + 1;kar je OK), toda konec besede se je temu ustrezno tudi prestavil ta dolžinoZnačke ==> dolžinaCelice+dolžinaZnačke!
  3. Kakšno vrednost pa ima znak, preden želite iz njega dobiti ASCII vrednost - po moje je to unicode znak in le ta nima definirane ascii vrednosti!
  4. .... več ko razčistiva točko 3


Torej glede na to, da vam funkcija ne deluje pravilno, se morate kot programer najprej vprašati kakšno vrednost ima vhod, takrat ko funkcij ne deluje. Torej kakšno vrednost ima spremenljivka znak?
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3529
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a Ace » Po jan 28, 2008 8:33 pm

Celica$ vsebuje formulo/vrednost celice. V parametru Zrno je podano začetno zrno za inicializacijo generatorja naključnih števil, medtem ko spremenljivka Znacka$ vsebuje niz uporabljen za označevanje enačb. Funkcija se mora nahajati v modulu MojModul. Funkcija ne sme spremeniti vsebine spremenljivke Celica$ in kot rezultat vrne (de)šifrirano vsebino celice.


Znacka$ je nek niz (pri nas je ta niz "ZNACKA"), ki ga vstavimo pred enačbo. Torej če je vrednost v celici A1 =A2/2, je potem ZNACKA=A2/2. To pa zato, da Calc ne prepozna kot enačbo ampak kot string.

Edit: Ok sem že naredil. V tretjem if stavku sem moral dati še en if stavek za preverjanje =,+ ali - in če je, je vstavlo značko pred niz.
Ace
 
Prispevkov: 2
Pridružen: Če dec 20, 2007 3:56 pm
Kraj: Maribor


Vrni se na Calc

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 3 gostov

cron