'Thinking about'에 해당되는 글 32건

  1. 2010.03.14 Java Binary Tree
  2. 2010.03.14 Python Client
  3. 2010.03.14 Python Server
  4. 2010.03.14 PL_HW01-3 in Perl
  5. 2010.03.14 PL HW 01_2 in perl
  6. 2010.03.14 Binary Tree in Ruby
  7. 2010.03.01 PHUN (2D physics sandbox) 2D 물리 시물레이터
  8. 2010.02.27 자바 Tar 묶음 파일 만들기
  9. 2010.02.27 자바 - 정규표현식 예제입니다.<혼자보기용>
  10. 2010.01.19 [go language] 2번째! echo 프로그램

Java Binary Tree

Node.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>
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
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

client_socket.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)
client_Window.py
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()
main.py
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

server_socket.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)
server_Window.py
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()
main.py
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

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

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

Node.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
BinaryTree.rb
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 물리 시물레이터

재미있는 장남감을 발견했습니다.션
PHUN이라고 2D 물리 시뮬레이션을 하는 프로그램입니다.
2D 물리 엔진 어떤거 있나 찾아보다가 발견했는데 직접 실행해보니 상당히 재미있군요.ㅋ
교육용으로 개발된것 같습니다.
설치도 윈도우,리눅스,맥 에서 쉽게 가능합니다. 라이센스는 사업용으로 사용만 안되면 프리이고요.
한번씩 심심풀이로 해보아도 좋겟네요.ㅋ

http://www.phunland.com/wiki/Home  에서 다운가능하고, 튜토리얼도 제공하고 있습니다.ㅋ
아래 동영상보시고 한번 해보세요.^^

자바 Tar 묶음 파일 만들기

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

자바 - 정규표현식 예제입니다.<혼자보기용>


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 프로그램

이번에는 구글 튜토리얼에 나와있는 echo 프로그램을 공부해 보겠습니다.


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")
코드에서 사용된 Bool을 해석해보면 , "n"라는 이름이고 기본값은 false입니다. 마지막의 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
prev 1 2 3 4 next