Coding/Perl 삽질기2010. 2. 10. 01:44
#
# Date : 2010. 2. 10
#
###############################################
# Folder Name

$DIR_NAME = ".";
###############################################

@expressions = ( "Hello", "world" );

opendir (DIR, $DIR_NAME) || die "Can't open folder";
@FILE_LIST = readdir DIR; 
closedir (DIR);


foreach $filename(@FILE_LIST)
{
    if (-f $filename) 
    {
        print $filename."\n";
    
        open (IN_FILE, "<".$filename) || die $!;
         
        while (my $line = <IN_FILE>) 
        {
            foreach $expression(@expressions)
            {
                if ( $line =~ /$expression/ )
                {
                    print $line;
                }
            }
        }

        close (IN_FILE);
    } 
}

'Coding > Perl 삽질기' 카테고리의 다른 글

자주 쓰는 정규 표현식  (0) 2010.02.25
[Perl] Hex2Ascii  (0) 2009.06.16
Perl 공부 다시 시작하다.  (0) 2006.10.07
Posted by chobocho
My Life/Me2Day2010. 2. 5. 02:30
  • 어릴적에 어린왕자를 읽으면서, 숫자만 좋아하는 어른이 되지 말아야지 했었지만, 어느덧 숫자를 좋아하는 어른이 되어버렸다. 2010-02-05 01:19:03

이 글은 chobocho님의 2010년 2월 5일의 미투데이 내용입니다.

Posted by chobocho
Coding/Python 삽질기2010. 2. 2. 01:23

#-*- coding: cp949 -*-
# Name        : py_email.py
# Author      : chobocho.com
# Version     :
# Copyright   :
# Description : Simple template maker
#

from Tkinter import *
import tkMessageBox
import os.path
import glob 
import re
 
class App:
    def __init__ (self, master):
        frame = Frame(master)
        frame.pack()
       
        # Text Area
        f0 = Frame(frame, width = 100, height = 100)
        f0.grid(row = 0, column = 0)
        self.text_scrollbar = Scrollbar (f0, orient=VERTICAL)
        self.text = Text(f0, width=80, height = 20, yscrollcommand=self.text_scrollbar.set)
        self.text_scrollbar.config(command=self.text.yview)
        self.text_scrollbar.pack(side=RIGHT, fill=Y)
        self.text.pack() 
       
        # List Box area
        f1 = Frame(frame, width = 100, height = 100)
        f1.grid(row = 0, column = 1)
       
        self.list_label = Label(f1, text="Template")
        self.list_label.pack()
       
        self.listbox_scrollbar = Scrollbar (f1, orient=VERTICAL)
        self.listbox = Listbox(f1, height=19, yscrollcommand=self.listbox_scrollbar.set)
        self.listbox_scrollbar.config(command=self.listbox.yview)
        self.listbox_scrollbar.pack(side=RIGHT, fill=Y)
        # 파일에서 템플릿을 읽어서 보여 줄 것
        self.ReadTemplate()
        self.listbox.bind("<Double-Button-1>", self.LoadFile)
        self.listbox.pack(side=RIGHT)
       
        # 보내는 사람과 받는 사람을 저장하는 부분
        f3 = Frame(frame, width = 100, height = 40)
        f3.grid(row = 1, column = 0)
       
        self.label_From = Label(f3, text="From")
        self.label_From.grid(row = 0, column = 0, sticky = W)
        self.label_To = Label(f3, text="To")
        self.label_To.grid(row = 1, column = 0, sticky = W)
        self.input_from = Entry(f3)
        self.input_from.grid(row = 0, column = 1)
        self.input_to = Entry(f3)
        self.input_to.grid(row = 1, column = 1)

        # 버튼을 그려주는 부분
        f4 = Frame(frame, width = 100, height = 40)
        f4.grid(row = 1, column = 1)
       
        #self.load_button = Button(f4, text="Load", command = self.LoadFile)
        #self.load_button.grid(row = 0, column = 0)
        self.clear_button = Button(f4, text="Clear", command = self.ClearText)
        self.clear_button.grid(row = 0, column = 0)
        self.info_button = Button(f4, text="Info", command = self.ShowInfo)
        self.info_button.grid(row = 0, column = 1)


    def ClearText(self):
        self.text.delete(1.0, END) 
   
    def ShowInfo(self):
        tkMessageBox.showinfo("Information","http://chobocho.com\nVersion 0.2")
   
    def GetFromTo(self):
        self.sender = self.input_from.get()
        self.receiver = self.input_to.get()

    def ReadTemplate(self):
        all_flist = glob.glob ("*.txt")
       
        for f in all_flist:
            if os.path.exists(f):
                self.listbox.insert(END, f.decode('cp949'))
               
    def LoadFile(self, event):
        self.items = self.listbox.curselection()
        self.el = self.listbox.get(self.items)
       
        self.GetFromTo()
        self.ClearText()
        if os.path.exists(self.el):
            self.fp = open(self.el, 'r')
            self.tempFileData = self.fp.read()
            self.fp.close()
            self.text_data_1 = re.sub('\$SENDER_NAME_' , self.sender , self.tempFileData)
            self.text_data   = re.sub('\$RECEIVER_NAME_' , self.receiver , self.text_data_1)
            self.text.insert(1.0, self.text_data.decode('cp949'))
#----------------------------------------------------------
# main
if __name__ == "__main__":     
    root = Tk()
    app = App(root)
    root.mainloop()


'Coding > Python 삽질기' 카테고리의 다른 글

Quick Sort  (0) 2010.06.10
[Python] 짧은 코드 모음  (0) 2010.01.22
[Python] 초간단 Lotto 생성기 소스  (0) 2010.01.22
Posted by chobocho
My Life/version 20102010. 1. 31. 17:16
사용자 삽입 이미지

'My Life > version 2010' 카테고리의 다른 글

편지  (0) 2010.06.01
가족  (0) 2010.04.17
Windows7 설치  (0) 2010.01.09
Posted by chobocho
My Life/Me2Day2010. 1. 31. 02:30
  • 子曰 君子食無求飽 居無求安 敏於事而愼於言 就有道而正焉 可謂好學也已 2010-01-31 01:18:08

이 글은 chobocho님의 2010년 1월 31일의 미투데이 내용입니다.

Posted by chobocho
My Life/WorldVision2010. 1. 31. 00:55
월드비전을 통하여 후원하고 있는 아프리카의 어린이가 보내준 그림입니다.

오늘도 이 멋진 그림을 보면서 힘을 냅니다.


사용자 삽입 이미지

'My Life > WorldVision' 카테고리의 다른 글

Worldvision 후원아동  (0) 2010.06.21
콩고에서 온 크리스마스 카드  (0) 2010.01.31
콩고에서 온 편지  (0) 2009.12.25
Posted by chobocho
My Life/WorldVision2010. 1. 31. 00:51
월드비전을 통해 후원하는 콩고의 어린이로 부터 크리스마스 카드를 받았습니다.

크리스마스가 한 달이나 지났지만, 기분이 좋습니다.


사용자 삽입 이미지

'My Life > WorldVision' 카테고리의 다른 글

아프리카에서 온 편지  (0) 2010.01.31
콩고에서 온 편지  (0) 2009.12.25
월드비전 후원3  (0) 2009.12.06
Posted by chobocho
My Life/Me2Day2010. 1. 30. 02:30
  • 사이트에 회원 가입을 할 때 마다 느끼지만 정말 가입하는게 어렵다. 잘못 입력한게 무엇인지도 잘 알려 주지도 않고, 거만한 오류 문구만 표시하는 페이지들… 이런 페이지를 만든 사람은 과연 자기가 디자인 한 걸 제대로 써보기는 하는 것일까? 2010-01-30 01:45:15

이 글은 chobocho님의 2010년 1월 30일의 미투데이 내용입니다.

Posted by chobocho
My Life/Me2Day2010. 1. 28. 02:30
  • 내 휴대폰은 항상 자신의 정체성에 대해서 이야기 한다. “나는 휴대용 알람이 아니야!” 2010-01-28 01:28:46

이 글은 chobocho님의 2010년 1월 28일의 미투데이 내용입니다.

Posted by chobocho
Coding/CPP 삽질기2010. 1. 28. 00:18

//============================================================================
// Name        : ChoboSplit.cpp
// Author      : chobocho.com
// Version     : v0.011
// CopyLeft
// Description : File Split
// Date        : 2010. 10. 28
//============================================================================

#include <iostream>
#include <fstream>
using namespace std;

#define _10MB (10*1024*1024)

class CSplit {
public:
    CSplit();
    ~CSplit();
    bool split(char *fileName);
    void make_batch_file (char *fileName, int count);
private:
    fstream source_fp;
    fstream target_fp;
};

CSplit::CSplit()
{

}

CSplit::~CSplit()
{
    source_fp.close();
    target_fp.close();
}


bool CSplit::split(char *fileName)
{
    int nof_target = 0;
    int count = 0;
    int read_size = 8192;
    char buffer[8192];

    string target_filename = fileName;
    target_filename += ".sh";

    source_fp.open(fileName, ios::binary|ios::in);
    target_fp.open(target_filename.c_str(), ios::binary|ios::out|ios::trunc);
    if (!source_fp)
    {
       cout << "Error : Can't find " << fileName << " !!" << endl;
       return false;
    }

    source_fp.seekg(0, ios_base::end);
    long source_filesize = source_fp.tellg();

    cout << "source file size : " << source_filesize << endl;

     // 10MB 이하의 파일은 분할 할 필요가 없음
    if ( source_filesize <= _10MB )
    {
         cout << "No need to split!" << endl;
         source_fp.close();
         return false;
     }

     source_fp.seekg(ios_base::beg);

     if (!target_fp)
    {
        cout << "Error : Can't open target file !!" << endl;
        return false;
    }

    while(( !source_fp.eof() )&& (source_filesize > 0) )
    {
        memset(buffer, 0, 8192);

        if (source_filesize < read_size)
        {
            read_size = source_filesize;
         }

         source_fp.read( buffer, read_size );
         target_fp.write( buffer, read_size );
         count += read_size;
         source_filesize -= read_size;

        if (count >= _10MB)
        {
            count = 0;
            target_fp.close();
            cout << "Make " << nof_target+1 << " file!" <<endl;
            char next_target_filename[256];
            sprintf( next_target_filename, "%s.s%d", fileName, nof_target++ );
            target_fp.open(next_target_filename, ios::binary|ios::out|ios::trunc);
            if (!target_fp)
            {
                source_fp.close();
                cout << "Error : Can't open target file !!" << endl;
                return false;
             }
        }
    }

    source_fp.close();
    target_fp.close();

    make_batch_file (fileName, nof_target);

    return true;
}

void CSplit::make_batch_file (char *fileName, int count)
{
    int i = 0;

    ofstream target("run.bat", ios::out);
    target << "echo off" << endl;

    target << "if not exist "<< fileName <<".sh goto error" << endl;
    for (i = 0; i < count ; i++)
    {
         target << "if not exist " << fileName << ".s" << i << " goto error" << i << endl;
    }

    target << "copy /b "<< fileName <<".sh";
    for (i = 0; i < count ; i++)
    {
     target << " + " << fileName << ".s" << i;
    }
    target << " " << fileName << endl;
    target << "goto finish" << endl;

    target << ":error" << endl;
    target << "echo Error : " << fileName << ".sh not exist" << endl;
    target << "goto finish" << endl;

    for (i = 0; i < count; i++)
    {
        target << ":error" << i << endl;
        target << "echo Error : " << fileName <<".s" << i << " not exist" << endl;
        target << "goto finish" << endl;
    }
    target << ":finish" << endl;
    target << "echo Finish" <<endl;
    target.close();
}

int main(int argc, char **argv) {
    cout << "!!!Chobo Spilt V0.011!!!" << endl;

    CSplit mySplit;

    if (argc >= 2)
   {
       mySplit.split(argv[1]);
    }
    cout << "!!!End!!!" <<endl;
    return 0;
}



실행결과

생성파일 : Run.bat + 분할된 파일들

Run.bat 의 내용
echo off
if not exist test.zip.sh goto error
if not exist test.zip.s0 goto error0
if not exist test.zip.s1 goto error1
if not exist test.zip.s2 goto error2
if not exist test.zip.s3 goto error3
if not exist test.zip.s4 goto error4
copy /b test.zip.sh + test.zip.s0 + test.zip.s1 + test.zip.s2 + test.zip.s3 + test.zip.s4 test.zip
goto finish
:error
echo Error : test.zip.sh not exist
goto finish
:error0
echo Error : test.zip.s0 not exist
goto finish
:error1
echo Error : test.zip.s1 not exist
goto finish
:error2
echo Error : test.zip.s2 not exist
goto finish
:error3
echo Error : test.zip.s3 not exist
goto finish
:error4
echo Error : test.zip.s4 not exist
goto finish
:finish
echo Finish



'Coding > CPP 삽질기' 카테고리의 다른 글

간단한(?) 퀴즈  (2) 2011.02.06
[CPP] Lotto 생성기  (0) 2010.01.22
[CPP] 폴더내 파일 목록을 보여 주는 코드 조각  (1) 2009.03.24
Posted by chobocho