입출력 - 파일 읽고, 쓰기

파일 생성하기
다음을 에디터로 작성해서 실행해 보면 프로그램을 실행한 디렉토리에 새로운 파일이 하나 생성되는 것을 확인할 수 있다.

# file1.py

f = open("새파일.txt", 'w')

f.close()

파일을 생성하기 위해서 우리는 open이란 파이썬 내장 함수를 썼다.
open함수는 다음과 같이 입력으로 파일이름과 파일열기모드라는 것을 받고 리턴값으로 파일 객체를 돌려준다.

파일객체 = open(파일이름, 파일열기모드)

 
파일 객체와 파일 이름은 프로그래머가 마음대로 바꿀 수 있지만 파일 열기모드는 정해진 값을 사용해야 한다.
파일 열기 모드에는 다음과 같은 것들이 있다.

파일열기 모드
r ( 읽기 모드 ) - 파일을 읽기만 할때
w ( 쓰기 모드 ) - 파일을 쓸때
a ( 추가 모드 ) - 파일의 마지막에 새로운 내용을 추가 시킬때

 
파일을 쓰기 모드로 열게 되면 해당 파일이 존재할 경우에는 원래있던 내용이 모두 사라지게 되고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. 위의 예에서는 없는 파일인 “새파일.txt"를 쓰기 모드로 열었기 때문에 새로운 파일인 "새파일.txt"라는 이름의 파일이 현재디렉토리에 생성되는 것이다.
 
만약 ”새파일.txt"라는 파일을 C:\Python이란 디렉토리에 생성하고 싶다면 다음과 같이 해야 할 것이다.

f = open("C:\Python\새파일.txt", 'w')
 
위의 예에서보면 f.close()라는 것이 있는데 이것은 열린 파일 객체를 닫아주는 것이다. 사실 이 문장은 생략해도 된다. 왜냐하면 파이썬 프로그램이 종료할 때 열린 파일 객체를 자동으로 닫아주기 때문이다. 하지만 프로그래머가 직접 열린 파일을 닫아주는 것은 좋은 습관이다.
 
 
파일을 쓰기 모드로 열어서 출력값 적기
위의 예에서는 파일을 쓰기모드로 열기만 했지 정작 아무런 것도 쓰지 않았다. 이번에는 작은 프로그램을 만들고 그 출력값을 파일에 적어 보도록 하자.

# file2.py

f = open("새파일.txt", 'w')

for i in range(1, 11):
    data = "%d 번째 줄입니다.\n" % i
    f.write(data)

f.close()
 
 
위의 프로그램을 다음의 프로그램과 비교해 보자.

for i in range(1, 11):
    data = "%d 번째 줄입니다.\n" % i
    print(data)
두 프로그램의 서로 다른 점은 data를 출력시키는 방법이다. 두 번째 방법은 우리가 지금껏 계속 사용해 왔던 모니터 화면에 출력하는 방법이고 첫 번째 방법은 모니터 화면대신에 파일에 결과값을 적는 방법이다. 차이점이 금방 눈에 들어 올 것이다.
 
두번째 방법의 print대신에 파일객체 f의 write라는 함수를 이용했을 뿐이다.
 
첫 번째 예제를 에디터로 작성해서 실행시킨 다음 그 프로그램을 실행시킨 디렉토리를 살펴보면 ”새파일.txt"라는 파일이 생성되었음을 확인 할 수 있을 것이다. 그 파일이 어떤 내용을 담고 있는 지 확인 해 보자. 아마 다음과 같을 것이다.
 
새파일.txt 의 내용

1 번째 줄입니다.
2 번째 줄입니다.
3 번째 줄입니다.
4 번째 줄입니다.
5 번째 줄입니다.
6 번째 줄입니다.
7 번째 줄입니다.
8 번째 줄입니다.
9 번째 줄입니다.
10 번째 줄입니다.

즉 두 번째 방법을 사용했을 때 모니터 화면에 출력될 내용이 파일에 고스란히 들어가 있는 것을 알 수 있다.
 
 
파일을 읽는 여러가지 방법
파이썬에는 파일을 읽는 여러가지 방법이 있다. 그것들에 대해서 자세히 알아보도록 하자.
 
첫 번째 방법
첫 번째 방법은 readline()을 이용하는 방법이다. 다음의 예를 보자.

# file2.py

f = open("새파일.txt", 'r')
ine = f.readline()
print(line)
f.close()
이전에 만들었던 "새파일.txt"를 수정하거나 지우지 않았다면 위의 프로그램을 실행시켰을 때 “새파일.txt"의 가장 첫 번째 줄을 읽어서 화면에 출력해 줄 것이다. 우선 f.open("새파일.txt", 'r')로 파일을 읽기 모드로 열어서 열린 파일을 나타내는 파일객체 f를 돌려준다. f객체를 이용해서 파일의 한줄을 읽는 파일 객체 관련함수인 readline()을 이용해서 읽은 파일의 첫 번째 줄을 읽어서 line 변수에 대입하고 출력해 보았다.
 
만약 모든 라인을 읽어서 화면에 출력하고 싶다면 다음과 같은 프로그램을 작성해야 한다.

# file3.py

f = open("새파일.txt", 'r')

while 1:
    line = f.readline()
    if not line: break
    print(line)

f.close()
while 1이란 무한 루프를 이용해서 f.readline()을 이용해서 파일을 계속해서 한 줄씩 읽어 들인다. 만약 더 이상 읽을 라인이 없으면 break를 수행한다. 여기서 알아두어야 할 것은 f.readline()은 파일의 내용을 한 줄씩 읽어 들인다는 사실이다.
 
위의 프로그램을 다음 프로그램과 비교해 보자.

while 1:
    data = raw_input()
    if not data: break
    print(data)
위의 예는 사용자의 입력을 받아서 그 내용을 출력하는 예이다. 위의 파일을 읽어서 출력하는 예제와 비교해 보자. 입력을 받는 방식만 틀리다는 것을 금방 알 수 있을 것이다. 두 번째 예는 키보드를 통한 입력방법이고 첫 번째 방법은 파일을 이용한 입력 방법이다.
 
두 번째 방법
두 번째 방법은 readlines()를 이용하는 방법이다. 다음의 예를 보기로 하자.

# file4.py

f = open("새파일.txt", 'r')
ines = f.readlines()

for line in lines:
    print(line)

f.close()
f.readlines()라는 것은 읽기 모드로 열린 파일의 모든 라인을 한꺼번에 읽어서 각각의 줄을 요소로 갖는 리스트로 돌려준다. 따라서 위의 예에서 lines는 [“1 번째 줄입니다.”,“2 번째 줄입니다.”, , , “10 번째 줄입니다.”]라는 리스트가 된다. f.readlines()에서 f.readline()과는 달리 's'가 하나 더 붙어 있음에 주목하도록 하자.
 
세 번째 방법
세 번째 방법은 read()를 이용하는 방법이다. 다음의 예를 보기로 하자.

# file5.py

f = open("새파일.txt", 'r')
data = f.read()
print(data)

f.close()
f.read()는 파일을 전부 읽은 문자열을 돌려준다. 따라서 위의 예의 data는 파일의 전체내용이다.
 
 
파일에 새로운 내용 추가하기
‘w’ 모드로 파일을 연 경우에는 이미 존재하는 파일을 열 경우 그 파일의 내용이 모두 사라지게 된다고 했는데 원래 있던 값을 유지하면서 단지 새로운 값만 추가하기를 원할 수도 있다. 이런 경우에는 파일을 추가 모드('a')로 열면 된다. 다음의 예를 보도록 하자.

# file6.py

f = open("새파일.txt", 'a')
for i in range(11, 20):
    data = "%d번째 줄입니다.\n" % i
    f.write(data)

f.close()
“새파일.txt"라는 파일을 추가모드('a')로 열은 파일 객체를 만든 다음, 파일 객체의 관련함수인 write를 이용해서 결과값을 파일에 적는다. 여기서 추가 모드로 파일을 열었기 때문에 ”새파일.txt"라는 파일이 원래 가지고 있던 내용 바로 다음에 결과값을 적기 시작한다. “새파일.txt"라는 파일을 읽어서 확인해 보면 원래있던 파일 뒷부분에 새로운 부분이 추가 되었음을 확인 할 수 있을 것이다.
 

[참고] tell과 seek
 
파일객체 관련 함수로 ‘tell’과 ‘seek’도 빼놓을 수 없다. ‘tell’은 지금 현재 파일 포인터의 위치를 반환하고, seek은 지정하는 곳으로 포인터의 위치를 변화시킬 수 있는 파일객체 관련 함수이다. 파일 포인터란 파일의 현재 위치를 가리키는 말이다. 대화형 인터프리터를 실행시키고 다음을 따라해 보자.

>>> f = open("test.txt", 'w')
>>> f.write("this is one line\n")
>>> f.write("two line\n")
>>> f.write("three line\n")
>>> f.close()
우선 test.txt라는 파일을 쓰기 모드로 열어서 파일 객체를 생성한후 write함수를 이용하여 총 세 개의 줄을 test.txt파일에 입력하고 파일 객체를 닫는다. test.txt파일은 다음과 같을 것이다.
 
<test.txt파일 내용>

this is one line
two line
three line

 
다음의 예를 계속해서 따라해 보자.

>>> f = open("test.txt", 'r')
>>> f.tell()
0
처음에 파일을 읽기 모드로 열었고, 그 파일 포인터 값을 알기 위해서 tell을 호출하였다. 물론 파일의 맨 처음이기 때문에 0을 반환했다.
 
 

>>> f.readline()
'this is one line\n'
>>> f.tell()
18
다음에 한 줄을 읽는다. 그 다음의 파일 포인터는 그 줄의 바이트 수만큼 포인터가 증가한다.
따라서 다시 tell을 호출했을 때 18이 된 것이다.
 
 

>>> f.readline()
'two line\n'
>>> f.tell()
28
마찬가지로 다시 한 줄을 읽었더니 파일 포인터의 위치는 28이 되었다.
 
 

>>> f.seek(0)
>>> f.readline()
'this is one line\n'
>>>
파일 포인터의 값을 변화시키기 위해서 seek를 사용하였다. f.seek(0)는 파일 포인터의 위치를 0으로 하라는 것이다. 따라서 다음에 다시 한 줄을 읽었을 때는 그 파일의 맨 처음 줄을 읽게 되는 것이다.

 
 
명령행 입력
이전에 도스를 사용해 본 독자라면 다음과 같은 명령어를 사용해 본적이 있을 것이다.

C:\> type a.txt

 
위의 type명령어는 뒤에 파일이름을 인수로 받아서 그 내용을 출력해 주는 도스 명령어이다.

도스명령어 [인수1 인수2]

많은 도스 명령어가 위와 같은 방식을 따른다. 즉 명령행(도스창)에서 입력인수를 직접 주어서 프로그램을 실행시키는 방식이다. 이러한 기능을 파이썬 프로그램에도 적용시킬 수가 있다.
 
파이썬에서는 sys란 모듈을 이용하여 이것을 가능하게 한다. sys라는 모듈을 쓰려면 아래의 예에서 같이 import sys처럼 import라는 명령어를 사용해야 한다. 모듈을 사용하고 만드는 방법에 대해서는 뒤에서 자세히 다룰 것이다.

#sys1.py

import sys

args = sys.argv[1:]
for i in args:
    print( i )
 
 
위의 프로그램을 C:\Python이란 디렉토리에 저장하고 윈도우즈 도스창을 열고 다음과 같이 입력해 보자.

C:\Python>python sys1.py aaa bbb ccc

 
 
다음과 같은 결과 값을 볼 수 있을 것이다.
결과값:

aaa
bbb
ccc

sys모듈의 argv는 명령창에서 입력한 인수들의 리스트를 나타낸다. 즉, argv[0]는 파일 이름인 sys1.py가 되고 argv[1]부터는 뒤에 따라오는 인수들이 차례로 argv의 요소가 된다. 위의 예는 입력받은 인수들을 for문을 이용해 차례대로 하나씩 출력하는 예이다.
 
위의 예를 이용해서 간단한 스크립트를 하나 만들어 보자.

#sys2.py

import sys
args = sys.argv[1:]
for i in args:
    print( i.upper())
문자열 관련함수인 upper()를 이용한 명령행에서 입력된 소문자를 대문자로 바꾸어 주는 간단한 프로그램이다. 도스창에서 다음과 같이 입력해 보자. (주의: sys2.py 파일이 C:\Python이란 디렉토리내에 있어야만 한다.)

C:\Python> python sys2.py life is too short, you need python

 
결과값:

LIFE IS TOO SHORT, YOU NEED PYTHON



크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/11 16:19 2009/02/11 16:19
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3983

네이버 API - http://dev.naver.com/

네이버 API - http://dev.naver.com/

: OpenAPI 제공.



http://dev.naver.com/nforge

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/10 11:07 2009/02/10 11:07
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3979

날마다 새로워진다면 우리는 얼마나 발전할 수 있을까?
끊임없이 노력하면 어느 순간 한단계 발전한다는 점은 불변의 진리다.
내가 닮고 싶어하는 사람들은 하나같이 지독하다 싶을 정도로 끊임없이 노력한다.
꾸준히 노력하기 위해서는 구체적인 목표를 세우고 매일 실천하는 것이 중요하다.

하나, 일신우일신(日新又日新)하기 위해 구체적으로 꾸준히 하는 것을 만들어라.
- 날마다 새로워지려면.

둘, 살아남기 위해 새로운 일에 도전하라.

셋, 분명한 가치관을 가지기 위해 글을 써라.

넷, 주변에서 스승을 찾자.

다섯, 애정을 가지거나 좋아하는 일을 찾자.

여섯, 긍정적으로 말하고 행동하라.


* 균형잡힌 사고와 발언을 위한 지침

* 스승을 찾는 법

* 애자일 프랙티스 가이드라인
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/10 11:01 2009/02/10 11:01
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3978

오픈마루 - http://www.openmaru.com/

오픈마루 - http://www.openmaru.com/

: 오픈마루 스튜디오는 NCsoft 내 개발 스튜디오 중 하나로
새로운 인터넷 서비스를 개발, 제공하는 있다.
OpenAPI 를 제공한다.


myID.net 공식블로그 - http://blog.myid.net/

스프링노트 개발자 노트 - http://dev.springnote.com/

라이프팟 - http://www.lifepod.co.kr/api/



History
  2006.08 오픈마루 스튜디오 조직 구성
  2006.10 오픈마루 블로그 개설
  2006.10 분당 서현동 사무실로 이전
  2006.12 Winter Of Code 개최
  2007.01 첫 번째 서비스 myID.net 시작
  2007.02 오픈마루 종합 채용
  2007.03 두 번째 서비스 스프링노트 시작
  2007.09 myID.net 영문 서비스 시작
  2007.10 스프링노트 영문 서비스 시작

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/10 10:42 2009/02/10 10:42
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3977

[웹기획] work_process & sitemap

진행 프로세스 와 사이트 맵을 작성하는 엑셀

이 파일들을 이용해서 사이트 제작의 1단계 작업이 들어간다.

work_process & sitemap DOWNLOAD
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/09 13:44 2009/02/09 13:44
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3972

균형잡힌 사고와 발언을 위한 지침 - http://younghoe.info/232

최근 들어 대립하지 않으려는 의지는 균형감을 자꾸 생각하게 한다.
합리적인 판단과 조화로운 결정 사이에는 많이 차이기 있지만
여기서 그것에 대해 긴 이야기를 늘어놓고 싶지는 않다.


최근 몇 차례 한 가지 기술적 이슈에 대해 자문 요청을 받았다.
자문을 할 수록 내가 정말 하고 싶은 말은
'나는 A라는 툴을 싫어한다.'에 가깝다는 것을 알았다.
(물론, 최대한 완곡하게 이야기 하면서, 내면에서는 그렇게 말하려는 욕구를 달래고 있다.)


기술과 툴 자체에 대해 공부하는 위치에 서면
스스로 세운 어떤 기준에 부합하지 못하는 기술/툴에 대해서는 비판적이 될 수 밖에 없다.
그것이 나를 위한 항변이지만...

반대 편으로 돌아서보자.
A가 아니라면 대체할 수 있는 뭔가가 있어야 한다.
사실 A에 완전한 비교 우위를 점하는 어떤 툴을 써보지 않은 이상
다른 어떤 툴도 지지하기는 힘들다.


또한, A라는 툴을 공급하는 업체와 그 직원들까지 생각하면 더 신중하게 발언해야 하기에
섣불리 A가 나쁘다라고 말할 수도 없다.


이런 류의 자문은 대개 급작스러운 순간에 구두로 물어오는 경우가 많아
말을 하면서 판단도 해야 한다.


여기서 최선 안은 무엇일까?


몇 차례 이런 경우를 겪으면서 내가 도출한 몇 가지는 아래와 같다.


1. 직접 해보지 않은 단순한 느낌이나 어디선가 들은 얘기는 언급하지 않는다.
모호한 지식을 풀어놓다 보면 스스로의 선호가 개입되기 쉽고
자칫 별 근거도 없는 주관적인 의견을 내놓을 수 있다.


2. 가능한 구체적으로 언급한다.
자문을 받는 의뢰인은 몰라서 묻는 것이다. 따라서, 오해의 소지가 존재한다.
구체적일수록 오해의 폭은 작고
추상적일수록 오해의 폭은 크다.


3. 차분하게 발언의 폭을 조절하여 리듬을 유지하라.
혹시 상대가 조급하여 질문 공세를 하게 되면
호흡 조절없이 정신없이 답변할 수 있다.
이렇게 되면 여유를 잃어 충분히 생각하면서 발언할 기회를 놓친다.
답변 와중에 한번 쯤 웃을 수 있는 여유를 갖을 수 있다면
분명 더 진솔한 답을 낼 수 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/04 18:07 2009/02/04 18:07
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3959

스승을 찾는 방법 [펌]

스승을 찾는 방법 - http://younghoe.info/219
스승을 찾는 방법 2nd Edition - http://younghoe.info/599

스승을 찾는 방법

가끔 사람들은 이렇게 묻곤 한다.
'그런 것들은 누구한테 배웠어요?'

누구한테 배웠는지 확실하지 않다.
보고 배운 것이라고 해도
경험을 통해 내 것으로 만들기 전에는 '배운 것'이라고 할 수 없다.
그것은 마치 수학 공식을 다 외워도 문제를 풀지 못하는 것과 같은 이치다.

예전에는 나의 식견을 훨씬 뛰어넘는 사람에게 배움을 얻게 되면
입에 침이 마르도록 그를 칭송했다.
그 즈음에는 내 것으로 만든 것은 아무 것도 없었다.
결국 배운 것이 없었다. 마치 TV의 등장 인물 대하듯... 주변의 스승을 대한 것이다.

최근에 쭉쭉빵빵 여자분 외에 뵙고 싶은 분이 있다. ^^
모처에서 프로젝트를 진행할 때
본인의 사고 틀에 맞춰서 작업을 하게 하여
주변 사람들에게 고통을 맛보게 한 분이다.
당시 회식 뒷풀이나 티타임/흡연시간에 단연 화제의 주인공으로 회자되던 분인데...

나는 그 분을 통해서 많이 성장했다.

만일 주변에 멘토가 없다고 아쉬워하는 분이 있다면
다시 한번 둘러보라고 얘기해주고 싶다.

스티브 잡스만이 인생의 스승이 되는 것은 아니다.
노력하면 스승을 찾는 법을 체득할 수 있다. :)

스승을 찾는 방법 2nd Edition

스승을 찾는 방법이라는 글을 쓴 적이 있다. 벌써 9개월 전의 글이다.
요즘 일터에서 또 한 사람의 스승을 만난다. (사실 여러 사람의 스승이 존재하는데 그 중에 개인적인 취향으로 한 사람을 지정하고 싶은 것이지도 모른다.)

스승의 사전적 정의가 어떤지 모르지만, 자신의 성장에 도움을 주는 사람을 스승이라고 봤을 때, 흥미롭게도 다수의 스승은 '스승'이라는 이름을 갖고 등장하지 않는다.('선생'이나 '교수'를 포함해서...)

돌아보면 내 인생에 등장한 인물 중에서 스승이라는 역할에 가장 어울리는 사람들은 선생이나 교수는 아니다. 그 인물의 모든 모습이 스승이 아니라 어떤 특징이 스승 역할을 했다.(신을 만난 것이 아닌 이상 당연한 것이리라.)

얘기가 거창해져 버렸다. 원래는 요즘 스승 역할을 해주는 특정 인물에 대해 쓰고자함이었다. 그런데 예전에 써둔 글이 생각 나서 연장선으로 정리한다.

그 분에 최근에 많은 것을 전수해주셨는데 그것을 간단히 정리해두고 싶다.
1. 자연원리에 입각한 사고, 그리고 실천
2. 지속적인 프로세스 개선(생활화)
3. 단시간에 특정 목적에만 초점을 맞춘 실행

또한, 두 가지 중요한 개념에 대해 메모해둬서 향후에 누군가와 함께 논의할 여지를 만들어둔다.
1. MECE
2. FFF

애초에 하고자 한 이야기는 위 두 단란이다.

그리고, 이왕 연작으로 글을 썼으니 결론을 지어보자. 지금 막 떠오르는 스승 진선미(?)를 두고 생각해보면 다음과 같은 공통점을 발견할 수 있다.
첫번째는 스승은 어김없이 내가 준비가 되어 있을 때 나타났고(스승을 만나려고 준비한 것은 아니다)
두번째는 그들(혹은 그들이 가진 스승으로써의 특징)은 감탄할만한 일관성을 지니고 있다는 점이다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/04 17:59 2009/02/04 17:59
Response
No Trackback , a comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3958

OPENQUERY(Transact-SQL)

지정한 연결된 서버에서 지정한 통과 쿼리를 실행합니다. 이 서버는 OLE DB 데이터 원본입니다. OPENQUERY는 테이블 이름처럼 쿼리의 FROM 절에서 참조될 수 있습니다. 또한 OPENQUERY는 INSERT, UPDATE 또는 DELETE 문의 대상 테이블로 참조될 수도 있습니다. 이것은 OLE DB 공급자 기능에 종속됩니다. 쿼리는 여러 결과 집합을 반환할 수 있지만 OPENQUERY는 첫 번째 것만 반환합니다.


구문

OPENQUERY ( linked_server ,'query' )
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/03 17:34 2009/02/03 17:34
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3954

MS SQL Linked Server 설정

연결된 서버를 만듭니다. 연결된 서버를 만들면 OLE DB 데이터 원본과 유형이 다른 분산 쿼리에 액세스할 수 있습니다. sp_addlinkedserver를 사용하여 연결된 서버를 만든 후 이 서버에 대해 분산 쿼리를 실행할 수 있습니다. 연결된 서버를 SQL Server 인스턴스로 정의한 경우에는 원격 저장 프로시저를 실행할 수 있습니다.

구문
-----------------------------------------------------------------------------------------
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
-----------------------------------------------------------------------------------------

로컬 SQL Server 인스턴스의 알려진 원격 서버 및 연결된 서버 목록에서 서버를 제거합니다.

구문

-----------------------------------------------------------------------------------------
sp_dropserver [ @server = ] 'server'
[ , [ @droplogins = ] { 'droplogins' | NULL} ]
-----------------------------------------------------------------------------------------




sp_addlinkedserver
@server = 'WEB',
@srvproduct = '',
@provider = 'MSDASQL',
@datasrc = null,
@location = null,
@provstr = 'DRIVER=MySQL ODBC 3.51 Driver;SERVER=192.168.1.1;DATABASE=board;UID=test;PWD=000;'

exec sp_dropserver WEB


Excel 스프레드시트에서 Microsoft OLE DB Provider for Jet 사용
Excel 스프레드시트에 연결하려는 목적으로 Microsoft OLE DB Provider for Jet을 사용하여 연결된 서버 정의를 생성하려면, 먼저 선택할 Excel 워크시트의 열과 행을 지정하여 Excel 내에 명명된 범위를 만드십시오. 범위의 이름은 분산 쿼리에서 테이블 이름으로 참조할 수 있습니다.

-----------------------------------------------------------------------------------------
EXEC sp_addlinkedserver 'ExcelSource',
'Jet 4.0',
'Microsoft.Jet.OLEDB.4.0',
'c:\MyData\DistExcl.xls',
NULL,
'Excel 5.0'
GO
-----------------------------------------------------------------------------------------
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/02/03 17:29 2009/02/03 17:29
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3953

RegExp - ASP 정규식

dim rtnResult, regEx
Dim Test : Test = "우리나라만세 하하하 내용"

Set regEx = new RegExp
regEx.Pattern = "<[a-z|/]+[^<>]*>"
regEx.IgnoreCase = True
regEx.Global = True

rtnResult = regEx.Replace(Test, "")
Set regEx = Nothing

response.write rtnResult



//----------------------------------------------------------
//---------- 함수명 : stripTag( ByVal str )
//---------- 설 명 : 문자열에 태그를 모두 삭제한 문자열을 돌려준다.
//----------------------------------------------------------


Function stripTag( ByVal Test)

Set regEx = new RegExp
regEx.Pattern = "<[a-z|/]+[^<>]*>"
regEx.IgnoreCase = True
regEx.Global = True

'response.write "정규식 전 "& Test

stripTag = regEx.Replace(Test, "")


'response.write "정규식 후 "& rtnResult


Set regEx = Nothing

End function



//==========================================================


Function Word_check(str,patrn)

Dim regEx, match, matches
Set regEx = new RegExp
regEx.Pattern = patrn '패턴을 설정합니다.
regEx.IgnoreCase = True '대/소문자를 구분하지 않도록 합니다.
regEx.Global = True '전체 문자열을 검색하도록 설정합니다.
Set Matches = regEx.Excute(str)

If 0 < Matches.count Then
Word_check = False
Else
Word_check = True
End If

End Function

pattern0 = "[^가-힣]" '한글만
pattern1 = "[^-0-9]" '숫자만
pattern2 = "[^-a-zA-Z]" '영어만
pattern3 = "[^가-힣a-zA-Z0-9/]" '숫자와 영어 한글만
pattern4 = "<[^>]*>" '태그만
pattern5 = "[^-a-zA-Z0-9/]" '영어 숫자만
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2009/01/29 16:45 2009/01/29 16:45
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/3940

« Previous : 1 : ... 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 47 : ... 101 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/11   »
          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
Statistics Graph

Site Stats

Total hits:
240244
Today:
40
Yesterday:
856