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 all1 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
#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.
#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.