'Thinking about'에 해당되는 글 32건
- 2010.03.14 Java Binary Tree
- 2010.03.14 Python Client
- 2010.03.14 Python Server
- 2010.03.14 PL_HW01-3 in Perl
- 2010.03.14 PL HW 01_2 in perl
- 2010.03.14 Binary Tree in Ruby
- 2010.03.01 PHUN (2D physics sandbox) 2D 물리 시물레이터
- 2010.02.27 자바 Tar 묶음 파일 만들기
- 2010.02.27 자바 - 정규표현식 예제입니다.<혼자보기용>
- 2010.01.19 [go language] 2번째! echo 프로그램
Java Binary Tree
Sorce Bank 2010. 3. 14. 09:15
Node.java
BinSearchTree.java
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 | public class Node<ty> { private Ty Data; private Node<ty> right_Child; private Node<ty> left_Child; private Node<ty> parent; Node(Ty data) { Data=data; right_Child= null ; left_Child= null ; parent= null ; } public Node<ty> getParent() { return parent; } public void setParent(Node<ty> parent) { this .parent = parent; } public Node<ty> getRight() { return right_Child; } public Node<ty> getLeft() { return left_Child; } public Ty getData() { return Data; } public void setRight(Node<ty> node) { right_Child=node; } public void setLeft(Node<ty> node) { left_Child=node; } public void setData(Ty data) { Data = data; } }</ty></ty></ty></ty></ty></ty></ty></ty></ty></ty> |
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | import java.util.*; public class BinSearchTree<ty extends = "" comparable= "" > { public int compare(Ty o1, Ty o2) { return o1.compareTo(o2); } private Node<ty> ROOT; private Node<ty> NullNode = new Node<ty>( null ); BinSearchTree() { ROOT = NullNode; } public boolean insert(Ty data) { if (ROOT == NullNode) { ROOT = makeNode(data,NullNode); return true ; } else { Node<ty> nextNode = ROOT; while ( true ) { if (compare(nextNode.getData(), data) > 0 ) { if (nextNode.getLeft() == NullNode) { nextNode.setLeft(makeNode(data,nextNode)); return true ; } nextNode = nextNode.getLeft(); } else if (compare(nextNode.getData(), data) < 0 ) { if (nextNode.getRight() == NullNode) { nextNode.setRight(makeNode(data,nextNode)); return true ; } nextNode = nextNode.getRight(); } else { Show( "중복되는 데이터 입니다." ); return false ; } } } } public boolean delete(Ty data) { if (ROOT==NullNode) { Show( "트리가 비어 있습니다." ); return false ; } Node<ty> nextNode = ROOT; while ( true ) { if (compare(nextNode.getData(), data) > 0 ) { if (nextNode.getLeft() == NullNode) { Show( "삭제할 값이 없습니다." ); return false ; } nextNode = nextNode.getLeft(); } else if (compare(nextNode.getData(), data) < 0 ) { if (nextNode.getRight() == NullNode) { Show( "삭제할 값이 없습니다." ); return false ; } nextNode = nextNode.getRight(); } else { if ( nextNode.getLeft()==NullNode && nextNode.getRight()==NullNode) { // When Target Node is Leaf Node. if (nextNode.getParent().getRight()==nextNode) { nextNode.getParent().setRight(NullNode); return true ; } else { nextNode.getParent().setLeft(NullNode); return true ; } } else if (nextNode.getLeft()!=NullNode && nextNode.getRight()!=NullNode){ // When Target Node has Two Children. Node<ty> exchangeNode = nextNode.getLeft(); while (exchangeNode.getRight()!=NullNode){ exchangeNode= exchangeNode.getRight(); } delete(exchangeNode.getData()); nextNode.setData(exchangeNode.getData()); return true ; } else { // When Target Node has a Child. if (nextNode.getLeft()==NullNode && nextNode.getRight()!=NullNode) { if (nextNode.getParent().getRight()==nextNode){ nextNode.getParent().setRight(nextNode.getRight()); } else nextNode.getParent().setLeft(nextNode.getRight()); nextNode.getRight().setParent(nextNode.getParent()); return true ; } else { if (nextNode.getParent().getLeft()==nextNode){ nextNode.getParent().setLeft(nextNode.getLeft()); } else nextNode.getParent().setRight(nextNode.getLeft()); nextNode.getLeft().setParent(nextNode.getParent()); return true ; } } } } } public void preorder(Node<ty> node) { if (node == NullNode) { return ; } else { System.out.print(node.getData() + " " ); preorder(node.getLeft()); preorder(node.getRight()); } } public void inorder(Node<ty> node) { if (node == NullNode) { return ; } else { inorder(node.getLeft()); System.out.print(node.getData() + " " ); inorder(node.getRight()); } } public void postorder(Node<ty> node) { if (node == NullNode) { return ; } else { postorder(node.getLeft()); postorder(node.getRight()); System.out.print(node.getData() + " " ); } } public Node<ty> getRoot() { return ROOT; } public void Show(String s) { } public Node<ty> makeNode(Ty data,Node<ty> parent) { Node<ty> n = new Node<ty>(data); n.setLeft(NullNode); n.setRight(NullNode); n.setParent(parent); return n; } } </ty></ty></ty></ty></ty></ty></ty></ty></ty></ty></ty></ty></ty></ty></ty> |
'Sorce Bank' 카테고리의 다른 글
네트워크 홈워크 1 (0) | 2010.03.25 |
---|---|
GeneralTree to BinaryTree (2) | 2010.03.18 |
Python Client (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
Python Client
Sorce Bank 2010. 3. 14. 09:10
client_socket.py
client_Window.py
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import socket class Sock: def __init__( self ): self .server = socket.socket() self .host = socket.gethostname() self .port = 5000 def connect( self ): self .server.connect(( self .host, self .port)) def end( self ): self .server.close() def send_msg( self ,msg): self .server.send(msg) def recive_msg( self ): return self .server.recv( 512 ) |
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 | # To change this template, choose Tools | Templates # and open the template in the editor. import java.awt as awt import java.lang as lang import javax.swing as swing import client_socket class Client_Win: def buttonPressed( self ,event): if self .send_msg.text! = "": self .client.send_msg( self .send_msg.text) self .field.text = self .field.text + "I Say :" + self .send_msg.text + "\n" self .send_msg.text = "" def exit(event): self .client.end() lang.System.exit( 0 ) def recive_message( self ): while True : msg = self .client.recive_msg() if msg! = "": self .field.text = self .field.text + "You Say :" + msg + "\n" def keyPressed( self ,event): if self .send_msg.text! = "": self .client.send_msg( self .send_msg.text) self .field.text = self .field.text + "I Say :" + self .send_msg.text + "\n" self .send_msg.text = "" def __init__( self ): # Create Main Frame Window self .win = swing.JFrame( "Client" , size = ( 200 , 200 ), windowClosing = exit ) self .win.contentPane.layout = awt.BorderLayout() self .panel_msg = swing.JPanel() self .panel_msg.layout = awt.FlowLayout() self .label = swing.JLabel( "Message :" ) # Create Send Button self .Button_send = swing.JButton( "Send" , preferredSize = ( 100 , 20 ),actionPerformed = self .buttonPressed ) # Create Input Field self .send_msg = swing.JTextField(preferredSize = ( 200 , 20 ), actionPerformed = self .keyPressed ) self .panel_msg.add( self .label) self .panel_msg.add( self .send_msg) self .panel_msg.add( self .Button_send) # Create Message Window self .field = swing.JTextArea(preferredSize = ( 50 , 1000 )) self .field.setEditable( 0 ) self .scrollpane = swing.JScrollPane( self .field, preferredSize = ( 300 , 100 )) # Add Componet to Main Frame self .win.contentPane.add( self .scrollpane, awt.BorderLayout.CENTER) self .win.contentPane.add( self .panel_msg, awt.BorderLayout.SOUTH) self .client = client_socket.Sock() self .show_Win() try : self .client.connect() except IOError: print "I/O Error!!" def show_Win( self ): self .win.pack() self .win.show() |
1 2 3 4 5 6 7 8 | # To change this template, choose Tools | Templates # and open the template in the editor. import client_Window import thread if __name__ = = "__main__" : c = client_Window.Client_Win() thread.start_new_thread(c.recive_message ,( )) |
'Sorce Bank' 카테고리의 다른 글
GeneralTree to BinaryTree (2) | 2010.03.18 |
---|---|
Java Binary Tree (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
PL HW 01_2 in perl (0) | 2010.03.14 |
Python Server
Sorce Bank 2010. 3. 14. 09:08
server_socket.py
server_Window.py
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import socket class Sock: def __init__( self ): self .server = socket.socket() self .host = socket.gethostname() self .port = 5000 self .server.bind( ( self .host, self .port ) ) self .server.listen( 5 ) def start( self ): self .client, self .addr = self .server.accept() def end( self ): self .client.close() def send_msg( self ,msg): self .client.send(msg) def recive_msg( self ): return self .client.recv( 512 ) |
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 | import java.awt as awt import java.lang as lang import javax.swing as swing import server_socket class Server_Win: def buttonPressed( self ,event): if self .send_msg.text! = "": self .server.send_msg( self .send_msg.text) self .field.text = self .field.text + "I Say :" + self .send_msg.text + "\n" self .send_msg.text = "" def exit(event): self .server.end() lang.System.exit( 0 ) def recive_message( self ): while True : msg = self .server.recive_msg() if msg! = "": self .field.text = self .field.text + "You Say :" + msg + "\n" def keyPressed( self ,event): if self .send_msg.text! = "": self .server.send_msg( self .send_msg.text) self .field.text = self .field.text + "I Say :" + self .send_msg.text + "\n" self .send_msg.text = "" def __init__( self ): # Create Main Frame Window self .win = swing.JFrame( "Server" , size = ( 200 , 200 ), windowClosing = exit ) self .win.contentPane.layout = awt.BorderLayout() self .panel_msg = swing.JPanel() self .panel_msg.layout = awt.FlowLayout() # Create Label self .label = swing.JLabel( "Message :" ) # Create Send Button self .Button_send = swing.JButton( "Send" , preferredSize = ( 100 , 20 ),actionPerformed = self .buttonPressed ) # Create Input Field self .send_msg = swing.JTextField(preferredSize = ( 200 , 20 ), actionPerformed = self .keyPressed ) # add to Panel self .panel_msg.add( self .label) self .panel_msg.add( self .send_msg) self .panel_msg.add( self .Button_send) # Create Message Window self .field = swing.JTextArea(preferredSize = ( 50 , 1000 )) self .field.setEditable( 0 ) self .scrollpane = swing.JScrollPane( self .field, preferredSize = ( 50 , 100 )) # Add Componet to Main Frame self .win.contentPane.add( self .scrollpane, awt.BorderLayout.CENTER) self .win.contentPane.add( self .panel_msg, awt.BorderLayout.SOUTH) self .server = server_socket.Sock() self .show_Win() try : self .server.start() except IOError: print "I/O Error!!" def show_Win( self ): self .win.pack() self .win.show() |
1 2 3 4 5 6 7 8 | # To change this template, choose Tools | Templates # and open the template in the editor. import thread import server_Window if __name__ = = "__main__" : s = server_Window.Server_Win() thread.start_new_thread(s.recive_message ,( )) |
'Sorce Bank' 카테고리의 다른 글
Java Binary Tree (0) | 2010.03.14 |
---|---|
Python Client (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
PL HW 01_2 in perl (0) | 2010.03.14 |
Binary Tree in Ruby (0) | 2010.03.14 |
PL_HW01-3 in Perl
Sorce Bank 2010. 3. 14. 09:02
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 | #!usr/bin/perl unless ($ #ARGV==0){ print "Usage : perl <script-file> <input_file>\n" ; exit( 1 ); } open( INPUT , $ARGV [ 0 ]); @lines =<input>; while ( 1 ){ print "Command List\nWord-count : Count number of Words.\nWord-replace : replace the words \nExit : Exit Program.\n" ; print "Input Command : " ; $command =<stdin>; print "\n" ; chomp $command ; if ( $command eq "Word-count" ) { #Word-Count %word={}; foreach $_ ( @lines ) { @a =split; for ( $n = 0 ; $n <=$ #a;$n++) { $word { @a [ $n ]}+= 1 ; } } for $w (keys %word){ print "$w : $word{$w}\n" if $word { $w }> 0 ; } print "\n[Finished]\n\n" ; } elsif ( $command eq "Word-replace" ){ # Word-Replace while ( 1 ) { print "edit : input a replace word\n" ; print "end : end input\n" ; print "replace mode > " ; $sub_cmd =<stdin>; chomp $sub_cmd ; if ( $sub_cmd eq "edit" ){ print "before word : " ; $before =<stdin>; print "After word : " ; $after =<stdin>; chomp $before ; chomp $after ; for ( $n = 0 ; $n <=$ #lines;$n++) { $lines [ $n ] =~ s/${before}/${after}/; } } elsif ( $sub_cmd eq "end" ) { last; } } print "enter output file : " ; $out_file =<stdin>; chomp $out_file ; open( OUTPUT , ">${out_file}" ); print "\n\n" ; foreach $_ ( @lines ) { print OUTPUT $_ ; print $_ ; } print "\n[Finished]\n" ; } elsif ( $command eq "Exit" ){ close( INPUT ); exit( 0 ); } else { print "$command\n" ; print "You entered a incorret Command.\n" ; } } </stdin></stdin></stdin></stdin></stdin></input_file></script-file> |
'Sorce Bank' 카테고리의 다른 글
Java Binary Tree (0) | 2010.03.14 |
---|---|
Python Client (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL HW 01_2 in perl (0) | 2010.03.14 |
Binary Tree in Ruby (0) | 2010.03.14 |
PL HW 01_2 in perl
Sorce Bank 2010. 3. 14. 09:01
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!usr/bin/perl unless ($ #ARGV == 1) { print "Usage : perl <script-file> <input-file> <output-file>\n" ; exit( 1 ); } open( IN_FILE , $ARGV [ 0 ]); open( OUT_FILE , ">${ARGV[1]}" ); @lines =<in_file>; foreach( @lines ) { $_ =~s/\d{ 1 , 4 }년 ?[ 12 ]?[ 0 - 9 ]월 ?[ 1 - 3 ]?[ 0 - 9 ]일/<data>$&<\/ DATE >/g; $_ =~s/[ 1 ]?[ 0 - 9 ]시 [ 1 - 6 ]?[ 0 - 9 ]분/<time>$&<\/ TIME >/g; $_ =~s/\d+(개|병|권|마리)/<quantity>$&<\/ QUANTITY >/g; print OUT_FILE $_ ; } close( IN_FILE ); close( OUT_FILE ); </quantity></time></data></in_file></output-file></input-file></script-file> |
'Sorce Bank' 카테고리의 다른 글
Java Binary Tree (0) | 2010.03.14 |
---|---|
Python Client (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
Binary Tree in Ruby (0) | 2010.03.14 |
Binary Tree in Ruby
Sorce Bank 2010. 3. 14. 08:55
Node.rb
BinaryTree.rb
1 2 3 4 5 6 7 8 9 | class Node attr_accessor :data , :rightChild , :leftChild , :parent def initialize data @parent = nil @data =data @rightChild = nil @leftChild = nil end end |
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | require 'Node' class BinaryTree attr_reader :root @@NilNode =Node. new ( nil ) def initialize @root = @@NilNode end def insert data if @root == @@NilNode # When first Node insert @root =makeNode(data, @@NilNode ) else nextNode= @root loop do if nextNode.data > data if nextNode.leftChild== @@NilNode nextNode.leftChild=makeNode(data,nextNode) return true end nextNode= nextNode.leftChild elsif nextNode.data < data if nextNode.rightChild== @@NilNode nextNode.rightChild=makeNode(data,nextNode) return true end nextNode=nextNode.rightChild elsif nextNode.data==data puts "Dupplicate value. : #{data}" return false end end end end def makeNode d,p node=Node. new d node.rightChild= @@NilNode node.leftChild= @@NilNode node.parent=p return node end def delete data target= @root until target== @@NilNode if target.data>data target=target.leftChild elsif target.data < data target=target.rightChild else if target.leftChild== @@NilNode and target.rightChild== @@NilNode # When target is Leaf Node target.parent.leftChild= @@NilNode if target.parent.leftChild==target target.parent.rightChild= @@NilNode if target.parent.rightChild==target return true elsif target.leftChild!= @@NilNode and target.rightChild!= @@NilNode # When target has two Childs exchangeNode=target.leftChild until exchangeNode.rightChild == @@NilNode exchangeNode= exchangeNode.rightChild end delete exchangeNode.data target.data = exchangeNode.data return true else # When target has a Child if target.leftChild== @@NilNode target.rightChild.parent=target.parent target.parent.leftChild=target.rightChild if target.parent.leftChild==target target.parent.rightChild=target.rightChild if target.parent.rightChild==target return true else target.leftChild.parent=target.parent target.parent.leftChild=target.leftChild if target.parent.leftChild==target target.parent.rightChild=target.leftChild if target.parent.rightChild==target return true end end end end puts "없는값 검색" return false end def inorder n,show if n== @@NilNode return end show.call( "InOrder :" ) if n== @root inorder n.leftChild,show show.call(n.data) inorder n.rightChild,show end def preorder n,show if n== @@NilNode return end show.call( "PreOrder :" ) if n== @root show.call(n.data) preorder n.leftChild,show preorder n.rightChild,show end def postorder n,show if n== @@NilNode return end show.call( "PostOrder :" ) if n== @root postorder n.leftChild,show postorder n.rightChild,show show.call(n.data) end end |
'Sorce Bank' 카테고리의 다른 글
Java Binary Tree (0) | 2010.03.14 |
---|---|
Python Client (0) | 2010.03.14 |
Python Server (0) | 2010.03.14 |
PL_HW01-3 in Perl (0) | 2010.03.14 |
PL HW 01_2 in perl (0) | 2010.03.14 |
PHUN (2D physics sandbox) 2D 물리 시물레이터
카테고리 없음 2010. 3. 1. 00:03
재미있는 장남감을 발견했습니다.션
PHUN이라고 2D 물리 시뮬레이션을 하는 프로그램입니다.
2D 물리 엔진 어떤거 있나 찾아보다가 발견했는데 직접 실행해보니 상당히 재미있군요.ㅋ
교육용으로 개발된것 같습니다.
설치도 윈도우,리눅스,맥 에서 쉽게 가능합니다. 라이센스는 사업용으로 사용만 안되면 프리이고요.
한번씩 심심풀이로 해보아도 좋겟네요.ㅋ
http://www.phunland.com/wiki/Home 에서 다운가능하고, 튜토리얼도 제공하고 있습니다.ㅋ
아래 동영상보시고 한번 해보세요.^^
자바 Tar 묶음 파일 만들기
Computer 기타 2010. 2. 27. 02:46
http://www.trustice.com/java/tar/ 에서 배포하는 tar 라이브러리를 이용하여간단하게 현재 폴더에 있는 jpg파일을 검색해서 Picture.tar로 묶는 프로그램을 만들어 보았습니다.
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 | import com.ice.tar.*; import java.io.*; import java.util.regex.*; public class Main { public static void main(String[] args) throws IOException{ File f = new File( "Picture.tar" ); int blockSize = TarBuffer.DEFAULT_BLKSIZE; TarArchive tout = new TarArchive( new FileOutputStream(f),blockSize); if (tout == null ) System.exit(- 1 ); TarEntry te= null ; Pattern p = Pattern.compile( "[a-zA-Z0-9_]+\\.jpg" ); File current = new File( "." ); File[] files = current.listFiles(); for (File str: files) { Matcher m = p.matcher(str.getName()); if (m.find()) { te = new TarEntry(str); te.setName(str.getName()); System.out.println(te.getName()); tout.writeEntry(te, true ); } } tout.closeArchive(); System.out.println( "묶음 완료" ); } } |
'Computer 기타' 카테고리의 다른 글
C# UnitTest by csUnit (0) | 2010.07.02 |
---|---|
Pthread with Semaphore <posix> (0) | 2010.03.16 |
Posix Thread 예제 소스 (0) | 2010.03.15 |
자바 - 정규표현식 예제입니다.<혼자보기용> (0) | 2010.02.27 |
자바 - 정규표현식 예제입니다.<혼자보기용>
Computer 기타 2010. 2. 27. 02:11
main5.cpp 라는 파일에서 include한 파일과 주석을 추출하여 출력해주는 소스입니다
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 | import java.util.regex.*; import java.io.*; import java.nio.charset.*; import java.nio.*; import java.nio.channels.*; public class Main { public static void main(String[] args) throws IOException{ File f = new File( "main5.cpp" ); FileInputStream fis = new FileInputStream(f); FileChannel fc = fis.getChannel(); ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0 , ( int )fc.size()); Charset cs = Charset.forName( "EUC-KR" ); CharsetDecoder cd = cs.newDecoder(); CharBuffer cb = cd.decode(bb); Pattern p = Pattern.compile( "#include <([a-zA-Z_]+/?[a-zA-Z_]*(\\.h|\\.hpp)?)>" ,Pattern.MULTILINE); Matcher m = p .matcher(cb); while (m.find()) { System.out.println( "You include : " +m.group( 1 )); } p = Pattern.compile( "///*.*" ,Pattern.MULTILINE); m = p .matcher(cb); while (m.find()) { System.out.println( "You comment : " +m.group()); } //System.out.println(cb); } } |
'Computer 기타' 카테고리의 다른 글
C# UnitTest by csUnit (0) | 2010.07.02 |
---|---|
Pthread with Semaphore <posix> (0) | 2010.03.16 |
Posix Thread 예제 소스 (0) | 2010.03.15 |
자바 Tar 묶음 파일 만들기 (0) | 2010.02.27 |
[go language] 2번째! echo 프로그램
Go Language 2010. 1. 19. 00:53
이번에는 구글 튜토리얼에 나와있는 echo 프로그램을 공부해 보겠습니다.
이부분은 저번시간에도 보았던 팩키지 선언부분입니다.
코드에서 사용된 Bool을 해석해보면 , "n"라는 이름이고 기본값은 false입니다. 마지막의 NewLine을 출력안하는 기능을 하기위해 선언했다고 설명하고 있습니다.
이것으로 echo.go 프로그램을 이해할 정도의 내용을 공부해 보았으니 마지막으로 실행을 해보겠습니다.
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 | package main import ( "os" "flag" ) var omitNewline = flag.Bool( "n" , false , "don't print final newline" ) const ( Space = " " Newline = "\n" ) func main (){ flag.Parse() var s string = "" for i:= 0 ; i < flag.NArg() ; i++ { if i > 0 { s += Space } s += flag.Arg(i) } if !*omitNewline { s += Newline } os.Stdout.WriteString(s) } |
코드는 위와 같습니다.
첫번째 라인부터 살펴보겠습니다.
1 | package main |
1 2 3 4 | import ( "os" "flag" ) |
팩키지를 import하는 부분인데 저번시간과는 다르게 그룹으로 import하고 있습니다.
이부분도 go랭기지에서 특징적인 부분입니다. 아래에서 보시겠지만 type,const, var도 위와 같은 방식으로 사용가능 합니다. import를 여러번 써주지 않아도 되기 때문에 생산성이 향상될 것 입니다.
1 | var omitNewline = flag.Bool( "n" , false , "don't print final newline" ) |
var키워드는 변수를 선언한다는 뜻입니다. omitNewline에 할당되는 flag.Bool은 아래에서 살펴보도록 하겠습니다.
1 2 3 4 | const ( Space = " " Newline = "\n" ) |
const 키워드는 상수를 나타냅니다. import와 마찬가지로 그룹화 해서 선언하고 있습니다.
1 | flag.Parse() |
여기서는 flag팩키지의 Parse()함수를 호출하였습니다. 이부분도 밑에서 따로 살펴보겠습니다.
간단히 내용은 사용자의 커맨드라인 argument를 입력받는 내용입니다.
1 | var s string = "" |
[var키워드] [변수이름] [변수 타입]의 형식으로 변수를 선언해 줍니다.
스트링 타입변수 s 를 ""로 초기화 해주었습니다.
1 2 3 4 5 6 | for i:= 0 ; i < flag.NArg() ; i++ { if i > 0 { s += Space } s += flag.Arg(i) } |
for문입니다. c나 java와의 차이점은 다음과 같습니다.
1. for의 [초기화;조건;증감] 구문을 괄호로 둘러싸지 않습니다.
2. for뒤에 하나의 라인(1개의 명령)이 오더라도 중괄호로 둘러주어야 합니다.
# 위의 내용은 if문에도 적용됩니다. 그리고 go 랭기지에는 while문이 없습니다.
1 2 3 | if !*omitNewline { s += Newline } |
flag.Bool()함수는 아래에서 살펴보겠지만 *bool 값을 리턴합니다. 그값에따라 not연산자가 붙었기 때문에
거짓일 경우 s에 NewLine을 추가하고 진실일 경우에는 NewLine을 추가하지 않습니다.
1 | os.Stdout.WriteString(s) |
os팩키지는 플렛폼에 독립적인 여러가지 시스템기능들을 제공하는 팩키지입니다. 팩키지내에 내용이 꾀 많기 때문에 WriteString(string s)함수만 다루도록 하겟습니다. Stdout(Standard out)으로 (s)의 스트링을 쓰라는 내용인데, 즉 화면에 s의 문자열이 출력되게됩니다.
이것으로 코드를 대략 살펴 보았습니다.
이 코드를 이해하기 위해서 flag팩키지에 대하여 알아보겠습니다.
flag 팩키지는 Command Line Argument를 다루는 함수들이 들어 있습니다.
예를 들어,
> gcc -c hello.c
라는 명령이 있으면, [gcc]는 프로그램을 실행시키는 명령이고, [-c]와 [hello.c]는 그 프로그램에 argument로 전달되어 작업을 수행하게 됩니다.
여기서 [-c]와 [hello.c]와 같은 argument를 다루기 위한 팩키지가 [flag] 팩키지 입니다.>>
우선은 가장 먼저 나왔던 [ flag.Bool()함수를 알아 보겠습니다. ]
func Bool(name string, value bool, usage string) *bool
위 와같이 선언되어 있습니다.
[func]로 함수임을 알수 있습니다.
인자로 name이라는 스트링과, value라는 기본값을 나타내는 bool, usage라는 스트링을 받고 있습니다.
리턴값은 *bool로 bool의 포인터를 리턴하고 있습니다.
1 | var omitNewline = flag.Bool( "n" , false , "don't print final newline" ) |
실제로 실행할때 [-n]을 같이 입력해주면, *omitNewLine의 값은 true를 갖게 됩니다.
두번째로
1 | func Parse() |
를 알아보겠습니다.
Parse()함수는 그다지 복잡하지 않고 그냥 Command Line Argument와 flag를 읽어 오는 일을 합니다.
세번째 로는 for문에서 사용되었던
1 | func NArg() int |
함수를 알아보도록 하겠습니다.
Number of Argument의 약자인데 말 그대로 Parse함수로 입력받은 Argument의 수를 int형으로 리턴해 줍니다.
[-n]과 같은 플레그는 제외하고 그 뒤의 [hello.c]와 같은 argument의 수만 포함됩니다.
마지막으로
1 | func Arg(i int ) string |
를 알아보겠습니다.
Arg(i) 는 i번째 Command Line Argument를 리턴해 줍니다. 물론 리턴 타입은 스트링입니다.
이것으로 echo.go 프로그램을 이해할 정도의 내용을 공부해 보았으니 마지막으로 실행을 해보겠습니다.
[8.exe]를 실행한 화면입니다. 예상했던데로 우리가 입력했던 argument가 출력됩니다.
[-n]플레그 입력하니까 Line이 한줄 덜 나오는것도 확인할 수 있습니다.
우리가 flag.Bool함수 에 name으로 주었던 [n] 말고 다른것을 입력하면 다음과 같은 에러 메시지가 출력됩니다.
이것으로 echo프로그램에 대해 알아보았습니다. 수고하셨습니다.^^*
# 제가 알려드린 방법으로 windows에 go 컴파일러를 설치하신분은 위와 같이 코드를 작성하면 안됩니다.
# 역시 비공식이기 때문에 버그가 존재하는 것 같습니다.
# 그룹화 선언 부분이 인식이 안되고, 라인의 끝에 세미클론을 해주어야 컴파일 되었습니다.
# 윈도우에서 되는 코드는 다음과 같습니다.
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 | package main import "os" import "flag" var omitNewline = flag.Bool( "n" , false , "don't print final newline" ) const Space = " " const Newline = "\n" func main (){ flag.Parse(); var s = "" ; for i:= 0 ; i <flag.narg() ;= "" i++= "" {= "" if = "" i= "" > 0 { s += Space } s += flag.Arg(i) } if !*omitNewline { s += Newline } os.Stdout.WriteString(s); } </flag.narg()> |
'Go Language' 카테고리의 다른 글
[go language] 1번째! Hello 세상! (0) | 2010.01.16 |
---|---|
Go Language Compiler 설치하기!! (0) | 2010.01.16 |