Login Register
Frontpage Code library Pastebin

Sisentäjä

Author: Jonhux
Added: 27. elokuuta 2011 kello 9.50
Edited: 27. elokuuta 2011 kello 9.50
Category: Sovellukset

Description

Vanha tekemäni sisentäjä, josta Legend teki oman versionsa :) Käyttäkää varoen ja omalla vastuulla :D

Code

Select all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// Jonhu 23.2.2010

lahde$ = "sotku.cb"
kohde$ = "sotku2.cb"

Print "Sisentää tiedostoa " + lahde$
Sisenna( lahde$, kohde$ )
Print "Tiedosto "+ lahde$ + " sisennetty kohteeseen: "+kohde 
WaitKey

Function Sisenna( file1$, file2$ )
    
    If FileExists( file1$ ) = 0 Then MakeError "Tiedostoa "+file1+" ei loytynyt"
    
    r = OpenToRead( file1$ )
    w = OpenToWrite( file2$ )
    
    While Not EOF(r)
        
        rivi$ = ReadLine(r)
        muutos = Sisennys( rivi$ )
        If muutos < 0 Then sisennys_kohta = sisennys_kohta + muutos    
        WriteLine w, GetVali( sisennys_kohta ) + Trim(rivi$)  
        If muutos > 0 Then sisennys_kohta = sisennys_kohta + muutos
    Wend
    
    CloseFile w
    CloseFile r
EndFunction

Function GetVali( nro, vali$ = "    " )
    If nro = 0 Then Return ""
    For a=1 To nro
        vali2$ = vali2$ + vali$
    Next a
    Return vali2$
EndFunction


Function Sisennys( rivi$ )

    stri$ = Trim( GetWord( rivi$, 1, " ") )
    
    // tutkitaan selvät tapaukset
    Select stri$
        Case "For"    : Return 1
        Case "While"  : Return 1
        Case "Repeat" : Return 1
        Case "Function":Return 1
        Case "Else"   : Return 1
        Case "Type"   : Return 1
        Case "Lock"   : Return 1
     
        Case "Next"   : Return -1
        Case "Wend"   : Return -1
        Case "Forever": Return -1
        Case "Until"  : Return -1
        Case "Unlock" : Return -1
        
        Case "Drawtoimage"  : Return 1
        Case "Drawtoscreen" : Return -1
   EndSelect
   
   // Jos if sana joudutaan parsimaan yksiriviset iffit pidemmistä
   If stri$ = "If" Then
        sanoja = CountWords( rivi$, " " )
        For a = 1 To sanoja
            If Trim( GetWord( rivi$, a, " " ) ) = "Then" Then 
                If a = sanoja Then Return 1 
                Return 0
            EndIf
        Next a
        Return 1
   EndIf
   
   // joku end-alkuinen / end ( endif, endfunction, endtype, endselect... )
   If LSet(stri$,3) = "End" Then Return -1
   
   // ei löytynyt mitään sanaa jolla olisi merkitystä sisennyksen kanssa..
   Return False
   
EndFunction

Comments

#19 Sent by: VesQ, 6. syyskuuta 2011 kello 18.36

GetWord kusee vähän ääkkösten kanssa niin kannattaa käyttää GetWord2-funktiota.

http://www.cbrepository.com/codes/code/11/

#20 Sent by: VesQ, 6. syyskuuta 2011 kello 18.36

Sama CountWordsille. Mutta kätevä koodinpätkä tämä on kuitenkin :)

Leave a comment

You must be logged in to comment.