Login Register
Frontpage Code library Pastebin

Sisentäjä

Author: legend
Added: 9. huhtikuuta 2011 kello 22.33
Edited: 15. huhtikuuta 2011 kello 22.19
Category: Sovellukset

Description

Sisentää koodin täydelliseksi! Ottaa huomioon yksi riviset if lauseet, selectit, tajuaa "end if" ja "endif" jne...

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
83
84
85
86
87
88
89
90
91
92
93
94
    Const file$ = "testi.cb"
    Const file2$ = "testi2.cb"
    
    If Not Sisentäjä(file,file2) Then
        Print "Tiedosto puuttui"
    Else
        Print "Tiedosto on sisennetty =)"
        Print file + " -> " + file2
    EndIf
    
    WaitKey
    
    
    '' by legend
    'Siventää tekstiä
    'palauttaa 1, jos onnistui
    Function Sisentäjä(file$,file2$)
        
        If FileExists(file)
            
            Dim Väli$,Txt$,Rivi$
            Väli = "    " 'alku väli
            
            R = OpenToRead(file) 'avataan tiedostot
            W = OpenToWrite(file2)
            
            While EOF(R) = 0
                Rivi = Trim(ReadLine(R))'luetaan rivi
                
                txt = GetWord(Trim(Rivi),1," ") 'otetaan sana
                
                'käydään yksi rivinen if lause läpi
                If txt = "If" And InStr(rivi,"Then") > 0 And InStr(rivi, Chr(34)+ "Then" +Chr(34)) = 0
                    If GetWord(Mid(Rivi,InStr(Rivi,"Then")),2) = "" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),1) = "'" Or Left(GetWord(Mid(Rivi,InStr(Rivi,"Then")),2),2) = "//"
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                    Else
                        WriteLine W, Väli + Rivi
                    EndIf
                    'käydään rivin jälkeen lavennettavat
                ElseIf txt = "Repeat" Or txt = "For" Or txt = "While" Or txt = "Type" Or txt = "Lock"  Or txt = "Function" Or txt = "If"
                    WriteLine W, Väli + Rivi
                    väli = väli + "    "
                    'käydään heti sisentävät kohdat
                ElseIf txt = "Until" Or txt = "Wend" Or txt = "EndIf" Or txt = "EndFunction"  Or txt = "Forever" Or txt = "Unlock" Or txt = "Next" Or Lower(txt) = "endtype" Or (txt = "End" And GetWord(rivi,2) = "Function")Or (txt = "End" And GetWord(rivi,2) = "If") Or (txt = "End" And GetWord(rivi,2) = "Type")
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
                ElseIf txt = "ElseIf" Or txt = "Case" Or txt = "Else" Or txt = "Default"  Or (txt = "Else" And GetWord(rivi,2) = "If")
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    väli = väli + "    "
                    'käydään 8 väliä laventavat kohdat
                ElseIf txt = "Select"
                    WriteLine W, Väli + Rivi
                    väli = väli + "        "
                    'käydään 8 väliä supistavat kohdat
                ElseIf txt = "EndSelect" Or (txt = "End" And GetWord(rivi,2) = "Select")
                    Väli = Left(väli,Len(väli)-8)
                    WriteLine W, Väli + Rivi
                    'käydään ei loogiset kohdat
                ElseIf txt = "DrawToImage"
                    If i = 0 //Lavennettavat
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                        i = 1
                    Else 'käydään heti sisennettävät kohdat, jotka myös laventavat rivin jälkeen
                        väli = Left(väli,Len(väli)-4)
                        WriteLine W, Väli + Rivi
                        väli = väli + "    "
                    EndIf
                ElseIf txt = "DrawToScreen" 
                    väli = Left(väli,Len(väli)-4)
                    WriteLine W, Väli + Rivi
                    i = 0
                    'kirjoitettaan muut ylös
                Else
                    WriteLine W, Väli + Rivi
                EndIf
                
            Wend
            
            CloseFile(R)
            CloseFile(W)
            
            Return 1 'palauettaan yksi jos se onnistui
            
        Else
            
            Return 0 'jos epäonnistui
        EndIf
        
    EndFunction
    

Comments

#6 Sent by: misthema, 27. huhtikuuta 2011 kello 17.52

Hienoa!

Itse vaihtaisin nämä rivit:
Const file$ = "testi.cb"
Const file2$ = "testi2.cb"

..Tällaisiksi:
file$ = Replace(Lower(CommandLine()),Chr(34),"")
If Not Lower(Right(file,3))=".cb" Then MakeError file+" is not CoolBasic -code file!"
file2$ = Replace(file,".cb", "2.cb")

Tällöin ohjelmaa voidaan pitää käännettynä sovelluksena ja drag&drop:ia haluttu koodinpätkä sille sisennättäväksi.

#9 Sent by: KilledWhale, 12. kesäkuuta 2011 kello 20.05

Ääkköset kannattaisi jättää jo tässä vaiheessa pois koodista. Myöhemmin jalompiin kieliin siirtyessä kääntäjät eivät hirveästi tykkää niistä ja CB-kääntäjäkin kaatuilee sopivilla wintöötin asetuksilla ääkkösiin.

Leave a comment

You must be logged in to comment.