컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Monthly Archive
Saturday, September 30, 2006

VMware 파일 복사, 마우스 드래그 앤 드롭으로, 게스트OS와 호스트OS 상호간에

가상PC인 VMware를 사용하면, 호스트OS(진짜OS)와 게스트OS(가상OS) 간에 파일 카피가 어려운 부분입니다.

다행히 VMware 에서는, 마우스로 간편하게 파일을 복사할 수 있는 기능을 제공합니다.


VMware 버전은 5.5.1,
진짜OS는 윈도우2000,
가상OS는 윈도우XP일 때를 기준으로 설명합니다. 우선 VMware Tools 를 설치해야 합니다. (▶▶ VMware Tools 최신 버전 얻는 방법은? Download 방법은? 참고)


진짜OS에서 가상OS로 파일 복사 (VM웨어 속에 파일 집어넣기)


이것은 아주 쉽습니다.

복사할 파일이 들어 있는 진짜OS의 폴더 바로 옆에, VMware창을 나오게 합니다.

진짜OS의 파일을 마우스로 클릭하여 선택한 후, 천천히 끌어당겨, VMware 속 가상OS의 바탕화면에 끌어다 놓습니다. 그러면 파일이 VMware 속으로 복사됩니다. 큰 파일이라면 시간이 많이 걸립니다.

복사된 파일이 보이지 않을 때가 있는데, 이때는 가상OS의 임시폴더(TEMP)속을 뒤져 보면 있습니다. 또는 다시 한번 더 카피해 주면 됩니다.

가상OS에서, "여기에 파일을 복사/이동할까요?"라는 메시지가 나온다면, 어느쪽도 좋지만 "이동"을 선택하는 것이 더 좋습니다. 가상OS의 임시폴더 속에 일차적으로 파일이 복사된 후, 가상OS의 바탕화면으로 다시 복사되기에 이런 메시지가 나옵니다.

(어떤 경우이든, 진짜OS의 파일이 이동되지는 않습니다. 여기서 소개하는 방법은 복사만이 될 뿐입니다.)

가상OS가 윈도98일 경우에는 복사에 더 오랜 시간이 걸립니다. 파일명이 한글일 때는 복사가 잘 되지 않을 것입니다. 이때는 파일명을 임시로 영문으로 바꾸어 주면 됩니다.


가상OS 속에서 진짜OS로 파일 복사 (VM웨어에서, 파일 꺼내기)


이것이 가능한지 몰랐는데, 매뉴얼을 보니까 된다고 해서 실제로 해보니 잘 되었습니다.

진짜OS의 폴더와, VMware창을 나란히 배치시킵니다. VMware 속의 바탕화면의 파일을 천천히 끌어다가, 진짜OS의 폴더 속에 놓습니다. 마우스 커서가 VMware 속에서 잘 빠져나오지 않을 수도 있기에 시행착오가 필요합니다. 만약 되지 않는다면, Alt+Ctrl키를 눌러보면서 다시 시도해 봅니다.


▶▶ [VMware/가상 PC] 소프트웨어로 또 한 대의 PC를 만들어 보자 !

▶▶ VMware 핫키(Hotkey) : 키보드 초점 밖으로 이동 / 전체 화면 모드 전환 / 리부팅

☞ VMware

한글 맞춤법] 난/란 구분: o글쓰기난 x글쓰기란 - Spelling of Hangul

오늘 ▶▶ 입력창/글쓰기난(글쓰기란)에, 전각도형/유로화(€)기호 입력법 - Euro Sign Input 이 게시물을 작성하며, "글쓰기난"이 옳은지 "글쓰기란"이 옳은지 잘 모르겠더군요.

한컴사전의 국어사전에 찾아보니, 은 한자어 뒤에 붙는다고 하기에, 글쓰기난이라고 해야 했습니다.


한컴사전 내용:

난(欄)
①책, 신문, 잡지 따위의 지면에 글이나 그림 따위를 싣기 위하여 마련한 자리. '칸'으로 순화. ¶독자의 소리를 싣는 난/빈 난을 채우다/새로운 난을 마련하다. ②『고유어와 외래어 명사 뒤에 붙어』'구분된 지면'의 뜻을 나타내는 말.¶어린이난/가십난.


란(欄)
『한자어 명사 뒤에 붙어』'구분된 지면'의 뜻을 나타내는 말. '칸'으로 순화. ¶광고란/독자란/투고란.





▶▶ 국어] 반대말 사전/비슷한말 사전, 반의어/유의어/동의어 오프라인 사전 - Korean Thesaurus

☞ 학습

주역 팔괘(周易 八卦) 폰트 - Trigram Font from the Book of Changes

일본어 폰트 속에 주역 팔괘를 표현할 수 있는 글꼴이 있습니다. 다만, 유니코드 인코딩에서만 보이고, 한글 완성형이나 심지어 일본어 Shift-JIS 인코딩에서도 보이지 않습니다.

일본어 폰트가 설치되어 있어야 합니다. 윈도우XP에는 기본적으로 설치되어 있습니다.

다음의 팔괘는 그림이 아니라 진짜 글짜입니다. 마우스로 긁어보면 글자로서 선택됩니다. 괘를 마우스로 선택하여 Ctrl+C키로 복사한 후, 워드패드나 MS워드 등에서 Ctrl+V키로 붙여 넣을 수 있습니다.

☰ : 건(乾) = 天

☱ : 태(兌) = 澤

☲ : 이(離) = 火

☳ : 진(震) = 雷

☴ : 손(巽) = 風

☵ : 감(坎) = 水

☶ : 간(艮) = 山

☷ : 곤(坤) = 地



한글 완성형 인코딩의 HTML 에서는 다음과 같은 코드로 위의 팔쾌를 표현할 수 있는데, IE의 버그 때문인지 보이지 않았습니다. 다만 파이어폭스에서는 잘 보였습니다.

☰

☱

☲

☳

☴

☵

☶

☷


따라서 유니코드(UTF-8) 인코딩의 웹페이지에서만 위의 폰트를 사용 가능할 것입니다.





이렇게 상하2개를 합치면 64괘를 표현할 수 있습니다.


☞ 폰트

키보드로, 참고표(※ 당구장표; 당구장 기호) 입력 방법 - Reference Mark Input

ㅁ(미음)키를 누른 후, 즉시 "한자키"를 누르면, 특수문자 목록이 나오는데, 그 중의 6번째를 클릭하면 ※ 이런 참고표가 찍힙니다. 일명 "당구장 표"입니다.




그밖의 자주 쓰이는 특수기호 입력


그리고 다음 기호들을 드래그하여, 즉 마우스로 긁어 선택한 후, Ctrl+C키를 눌러 복사하여, 다른 문서에 Ctrl+V키로 붙여 넣으면 됩니다.

―: 가로줄
…: 말줄임표
·: 가운뎃점

℃ : 섭씨 기호
℉ : 화씨 기호
ℓ : 리터 기호
Ω : 옴 기호
√ : 루트 기호
∞ : 무한대 기호
∴ : 고로(Therefor) 기호

☎ ☏ : 전화기 기호
☜ ☞ : 손 기호

「」: 낫표
『』: 겹낫표

¥ : 엔화 기호



▶▶ 입력창/글쓰기난에, 전각도형/유로화(€)기호 입력법 - Euro Sign Input

▶▶ 한글 특수문자 입력표 - Hangul Special Character Input Table

☞ 텍스트 에디터 (Text Editor)

☞ 오피스(Office)/엑셀(Excel)/워드(Word)

입력창/글쓰기난에, 전각도형/유로화(€)기호 입력법 - Euro Sign Input

"㉳☆◆" 이런 전각 특수문자를 입력하려고 할 때에는 다음과 같은 방법이 있습니다.

방법1: 키보드로 직접 입력


예를 들어 한글 자음, 미음(ㅁ)키를 누른 후, 그 상태에서 "한자"키를 누르면 화면 맨 밑에,

#&*@§※☆★○●......

이런 특수문자 목록이 나타납니다. 목록에서 필요한 문자를 클릭하면 즉시 입력됩니다. 목록 우측의 화살표 버튼을 누르면 더 많은 특수문자들이 나타납니다.

"ㄱ"부터 "ㅎ" 까지, 이런 식으로 각종 특수문자들이 배정되어 있습니다.



방법2: 문자표에서 복사하여 입력


위의 방법은 키를 직접 외워야 하기에, 입력이 불편합니다. 다음과 같은 문자표를 사용하면 간단합니다.
일본어 특수 문자: Japanese Special Characters

(참고로 위의 그림은 일본어 폰트 속의 특수문자 목록입니다: ▶▶ 일본어 폰트(글꼴)의 특수 문자로, 별 모양 등 각종 문양 그리기: Japanese Special Characters)

문자표의 실행과 사용법은 여기에 있습니다: ▶▶ [QnA] 스페인어/프랑스어/독어 폰트는 어디에 있나요?



유로화 통화 기호 입력 방법은?


키보드의 ㄹ(리을) 키를 누른 후 즉시 "한자키"를 누르면
화면 맨 밑의 우측에 특수문자 목록이 나옵니다. 그 특수문자 목록 우측의 화살표를 클릭하면, € 이렇게 유로화 기호가 나옵니다. € 기호를 클릭하면 됩니다. 또는 "€" 이 기호 자체를 복사해서 사용해도 됩니다.


▶▶ 한글 특수문자 입력표 - Hangul Special Character Input Table

▶▶ 컴퓨터용어] 반각 문자 / 전각 문자;(半角/全角)의 의미, 차이점- Half-Width / Full-Width Character

☞ 텍스트 에디터

☞ 오피스/엑셀/워드

Friday, September 29, 2006

울트라에디트] 한글 간격, 글자 간격, 줄간격 조정법 - 울트라에디터 UltraEdit Spacing

일정한 간격으로 한글 글자 나오게 하기


프로그래밍 등에서는, 모든 글자들의 간격이 일정해야 소스 코드 편집이 쉽습니다. 일정한 간격을 가진 한글 폰트를 지정하면 됩니다.

울트라에디트에, 굴림 대신 굴림체 를, 또는 돋움 대신 돋움체 를 지정하면 됩니다. 즉, 폰트명 끝에 "체"가 붙은 글꼴을 사용하면 됩니다. 저의 경우에는 "돋움체"를 사용하고 있습니다.

폰트 변경 방법:

울트라에디트 메뉴의,

View (보기) > Set Font (글꼴 지정)

대화상자에서, 돋움체 등을 지정하고 "OK" 버튼을 누르면 됩니다.

돋움체 등으로 지정하면, 영문 글꼴의 간격도 일정해집니다. 만약 윈도우 메모장 같은 폰트를 선호한다면, Fixedsys 라는 폰트를 지정해 주면 됩니다.




줄 간격 (행 간격) 늘리기


텍스트 편집기들은, 행과 행 사이가 딱 붙어 있어서 가독성이 떨어집니다. 다행히도, 울트라에디트는 행 간격을 조정할 수 있습니다.

울트라에디트 메뉴에서,

View (보기) > Spacing (간격) > 1 1/2 Spacing (1과 2분의1 간격)

을 선택하면 읽기에 적당하도록 행 간격이 벌어집니다. 기본값은 "Single (1줄)"로 되어 있습니다.


☞ 텍스트 에디터

C언어,비트연산] unsigned short의 좌측, 우측 바이트만 얻기 - Left Byte, Right Byte

부호 없는 16비트 정수인 "unsigned short" 에서, 어느 한쪽의 바이트 값만을 알아내야 할 때가 있습니다. 특히 유니코드나, 완성형 한글 음절을 처리할 때 그렇습니다.

비트연산으로 바이트 추출 작업을 할 수 있는, getLeftByte(), getRightByte() 함수를 만들었습니다.

unsigned short 은 2개의 바이트(byte)로 이루어져 있습니다.
1번째 바이트(Lead Byte)를 좌측 바이트,
2번째 바이트(Trail Byte)를 우측 바이트로 표현했습니다.


unsigned short에서, 특정 바이트 읽기 예제


파일명: 0.cpp
#include <stdio.h>

unsigned char getLeftByte(unsigned short n);
unsigned char getRightByte(unsigned short n);


void main(void) {

  char s[] = "가"; // 한글 완성형 "가"는, 메모리에는 0xA1B0 로 저장됨

  unsigned short char16 = *((unsigned short *)s);

  printf("(좌측 바이트) = 0x%02X, (우측 바이트) = 0x%02X\n", getLeftByte(char16), getRightByte(char16));
}


/*
1번째 바이트를 2번째 바이트 자리로 밀어버리면
2번째 바이트는 사라지고, 원래 1번째 바이트가 있던 자리는
0으로 채워짐. 따라서 1번째 바이트인 A1만 남음

10100001 10110000 (= 0xA1B0)
-----------------
00000000 10100001
*/
unsigned char getLeftByte(unsigned short n) {
  return (unsigned char) (n >> 8);
}


/*
0과 & 되면 0,
1과 & 되면 원래 값 유지되기에,
0xFF (00000000 11111111) 로 & 하면,

10100001 10110000 (= 0xA1B0)
00000000 11111111
-----------------
00000000 10110000

1번째 바이트는 모두 0이 되고
2번째 바이트는 그대로 존재함. 따라서 2번째 바이트인 B0만 얻을 수 있음
*/
unsigned char getRightByte(unsigned short n) {
  return (unsigned char) (n & 0xFF);
}



출력 결과:
(좌측 바이트) = 0xA1, (우측 바이트) = 0xB0



▶▶ C언어,비트연산] 바이트 순서 바꾸기 함수, short의 byte 위치를 Byte Swap

☞ C/C++

C언어,비트연산] 바이트 순서 바꾸기 함수, short의 byte 위치를 Byte Swap

한글이나 유니코드 글자는 "unsigned short" 즉 "부호 없는 16비트 정수"로 메모리에 저장됩니다. 즉 바이트 2개로 이루어져 있습니다. 그런데 인텔 CPU는 리틀 엔디언 (little-endian) 이기에, 이 2바이트의 순서를 바꾸어서 저장합니다. 따라서 제대로 된 글자를 얻으려면 바이트의 순서를 다시 바꾸어서 출력해야 합니다.

비트연산을 이용하여 "unsigned short" 의 바이트 순서를 뒤바꾸는 함수가, 여기서 소개하는 byteSwap() 입니다.


바이트 순서 변경 예제


파일명: 0.cpp
#include <stdio.h>

unsigned short byteSwap(unsigned short n);


void main(void) {

  char s[] = "가"; // 한글 완성형에서 "가"는 0xB0A1 이지만, 메모리에는 0xA1B0 로 저장됨

  unsigned short char16 = *((unsigned short *)s);

  printf("(메모리에 저장된 순서) 0x%04X, (뒤바꾼 순서) 0x%04X\n", char16, byteSwap(char16));
}



unsigned short byteSwap(unsigned short n) {
  return ((n >> 8) | (n << 8));
}


실행 결과:
(메모리에 저장된 순서) 0xA1B0, (뒤바꾼 순서) 0xB0A1




함수 설명


(편의상, 16비트 2진수를 8비트씩 나누어 표기했음)

10100001 10110000 (= 0xA1B0) 에서

첫번째 바이트를 (n >> 8) 이렇게 우측으로 8비트를 밀면
00000000 10100001
이렇게 되고

또한 (n << 8) 이렇게 두번째 바이트를 좌측으로 8비트 밀어서
10110000 00000000
이렇게 만든 후

| (OR) 연산자는 대응되는 비트가 모두 0일 때는 0이 되고, 그렇지 않을 때는 변동이 없으므로

00000000 10100001
10110000 00000000
-----------------
10110000 10100001

결국 이렇게 2쌍의 바이트의 순서가 뒤집어짐.



▶▶ C언어,비트연산] unsigned short 에서 좌측 바이트, 우측 바이트만 얻기 - Left Byte, Right Byte

▶▶ '리틀 엔디언 little-endian 유니코드'와 '빅 엔디언 big-endian 유니코드'의 차이점

☞ C/C++

엑셀/Excel] 랜덤 함수 RAND() 사용법, 정수 난수 출력 - Random Integer

엑셀의 RAND() 함수로, 랜덤한 숫자, 즉, 무작위의 난수를 만들 수 있습니다.

0~9까지의 정수로 난수 발생


=INT(RAND()*10)


1~10까지의 정수로 난수 발생


=INT(RAND()*10) + 1


0과 1사이의, 소수점이 있는 실수로 난수 발생


=RAND()



위의 수식들을 셀에 기입하면 랜덤한 숫자가 출력됩니다.

엑셀에서, 키보드의 F9 키를 누르면, 모든 난수들이 다른 난수로 변경됩니다. (다른 시트들의 랜덤 함수들도 변경됨)


원래 RAND() 함수는, 정수(0, 1, 2, 3...)가 아닌 실수(0.12345 등)를 반환하는데, 실무에서는 정수로 된 난수가 주로 사용되기에, INT() 함수를 사용해 정수로 변환해 주어야 합니다. INT() 함수는 실수를 정수로 반올림하는 것이 아니라, "내림"을 하여 정수로 만듭니다. RAND() 함수에는 반올림이 필요없고 INT() 함수면 충분합니다.

RAND() 함수가 있는 엑셀 시트는, 아무것도 변경하지 않고 닫으려고 해도, 문서가 변경되었다며 저장할까요? 라는 메시지가 나옵니다. 문서를 열 때마다 RAND() 함수가 만드는 값이 달라지기 때문입니다.



그런데 VBA 즉 비베 프로그래밍에서는 Rnd 함수를 사용하여 랜덤 숫자를 만듭니다. 여기에 예제가 있습니다: ▶▶ 엑셀/Excel] VBA의 Rnd 함수로, 1에서 100까지의 랜덤 숫자 만들기


특정 범위의 난수 구하기: ▶▶ Excel 엑셀, 지정한 범위의 난수 값 생성, 특정 범위 내에서 랜덤 발생; Random Range




▶▶ [엑셀/Excel] 실수를 반올림하여 정수로; 소수점 특정 자리에서 반올림하는 함수 - ROUND


정수 난수 발생기: ▶▶ 난수 발생기; 랜덤 정수 생성, 무작위 숫자 발생; Random Int Number Generator

영어 소설(영문 고전소설/동화원서) 무료 다운로드 하는 곳은? - English Novel

버지니아 대학 도서관
<University of Virginia Library's Etext Center>
여기에, 수천 권의 영문 소설들과 각종 고전들이 무료로 제공되고 있습니다. 셰익스피어 Shakespeare 부터 아동문학 Children's Literature 까지 다 있습니다.

물론 저작권이 소멸된 고전들입니다.


예를 들어,
C로 시작되는 성을 가진 작가 리스트에서
루이스 캐롤 Carroll, Lewis 을 찾아보면 "이상한 나라의 앨리스" Alice's Adventures in Wonderland (1866) 라는 동화가 있습니다.

e-book | Palm | web version

파일은 이런 3가지 형식으로 제공됩니다. e-book 은 "마이크로소프트 리더 (Microsoft Reader)"라는 무료 전자책 프로그램에서 읽을 수 있는 것인데, 이쪽을 추천합니다. "e-book"이라는 링크를 클릭하면 CarAlic.lit 이라는 전자책 파일이 다운로드됩니다. (참고로, web version은 인터넷에서 직접 읽는 것인데, 분량이 많지 않았습니다. 축약판 같기도 했습니다.)


Alice's Adventures in Wonderland
이 화면은, 마이크로소프트 리더로 본, 이상한 나라의 앨리스의 첫 페이지입니다. 즉, CarAlic.lit 이라는 파일의 내용입니다.


Jules Verne, Around the World in Eighty Days
쥘 베른의 소설 "80일간의 세계일주"의 첫 페이지. (Jules Verne, Around the World in Eighty Days.lit)



클리어타입이라서 LCD모니터에서 가독성이 높습니다. CRT모니터에서라면 오히려 눈이 침침해질 수도 있겠지요. 마이크로소프트 리더는 윈도우XP가 아닌 운영체제에서도 클리어타입을 보여줍니다.


우선 "마이크로소프트 리더"를 설치해야, 위의 무료 전자책을 읽을 수 있습니다: ▶▶ [전자책/eBook] 마이크로소프트 리더 / Microsoft Reader



☞ 학습

Archive File / Archived File (아카이브 파일) 이란 무엇인가요?

Archive 란 뭔가를 저장하여 보관한다는 뜻입니다. 컴퓨터에서 Archive(아카이브)란 여러 가지 의미로 사용됩니다. 다음과 같습니다.

(1) Archive File 은 대부분의 경우, 압축된 파일을 의미입니다. zip 이나 rar 등의 확장자를 가지고 있습니다.

파일을 압축하는 것을 Compress 라고 할 때도 있지만, Archive 라고 할 때도 있습니다.



(2) "보관 속성 / 저장 속성"을 가진 파일을 Archive File 이라고 하기도 합니다. 더 정확하게 말하자면 "Archive file attribute" 를 가진 파일입니다. (▶▶ 파일의 '기록 가능 속성 (Archive File Attribute)' / '보관 속성'이란 무엇입니까? [QnA] 참고)


(3) 블로그 사이트에서, 지난 게시물들을 월별로 모아 놓은 페이지를 Archive 라고 합니다. 물론 이때는 Archive File 이라고 하지 않고 Archive Page 라고 합니다.




▶▶ 파일을 압축하는 이유는? 파일 압축의 원리는? [컴퓨터 초보자를 위한 강좌]

▶▶ [QnA] 파일 압축 프로그램의 종류는?

Thursday, September 28, 2006

울트라에디트 HTML 구문강조(문법 강조) 방법은? - Syntax Highlighting 울트라에디터

IE의 "소스 보기"로 웹페이지 소스를 볼 때, .html 또는 .htm 확장자가 없는 페이지는, 울트라에디트에서 구문 강조가 되지 않는 문제가 있습니다.

울트라에디터는 확장자로서만 파일의 종류를 구분하기에, 확장자가 없으면 그 파일이 HTML 이 명백하더라도, 구문강조가 전혀 되지 않습니다.

이때는 사용자가 수동으로 구문강조의 종류를 지정해 주어야 합니다.

울트라에디트 상단 풀다운 메뉴에서

View > View As (Highlighting File Type) > HTML

을 선택하면, 현재 보고 있는 HTML 파일에 구문강조가 되어 태그에 색깔이 입혀집니다. 설령 HTML 이 아니라도 강제로 HTML로 구문강조가 됩니다.



HTML 구문강조(문법강조)에 핫키 지정하기


그렇지만 위와 같이 메뉴에서 직접 선택하는 것은 번거롭기에, 핫키를 지정해 놓으면 편리합니다.

여기에 핫키 지정법이 있습니다: ▶▶ 울트라에디트] 핫키 지정하기 / Hotkey 사용자 정의, UltraEdit Key Mapping

HTML 은 울트라에디터에서 3번째 언어로 지정되어 있기에, 환경설정창의 "Commands" 목록에
ViewShowAsLanguage3
이렇게 나옵니다. 여기에 핫키를 지정하면 HTML 구문강조 핫키가 만들어집니다.

저의 경우에는, Ctrl+Numeric pad 3 키를 지정했습니다. Ctrl키를 누르면서, 키보드 우측 키패드의 3을 누르면, 아무 파일이든 강제로 HTML 로 구문강조가 됩니다.



▶▶ 울트라 에디트] 색깔로 문법 강조(구문 강조), 새 언어 추가 - UltraEdit, Syntax Highlighting 울트라 에디터

☞ 텍스트 에디터

배치파일] FOR문으로, 텍스트 파일 행 처리 - 도스 DOS Bat File 강좌

배치 파일의 FOR문으로 파일들에 와일드카드만 적용시킬 수 있는 것이 아니라, 텍스트 파일의 각 행들도 일괄처리할 수 있습니다.


우선, 이것은 이 게시물에서 사용할 테스트용 텍스트 파일입니다. test.txt 라는 이름으로 저장합니다.
foo

이 파일은 테스트용 파일입니다.

FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO

Google Goooooooooooogle

ㅎㅎ

fooFoo

<foo>

안녕하세요. 반갑습니다.




텍스트 파일을 한줄씩 처리하는 예제


다음 예제를 0.bat 등의 이름으로 저장합니다.
@echo off


for /f "delims=" %%i in (test.txt) do echo 결과입니다: %%i



그런 후, 도스창에서 0.bat 이라고 실행하면
D:\Z>0.bat
결과입니다: foo
결과입니다: 이 파일은 테스트용 파일입니다.
결과입니다: FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO FOO
결과입니다: Google Goooooooooooogle
결과입니다: ㅎㅎ
결과입니다: fooFoo
결과입니다: <foo>
결과입니다: 안녕하세요. 반갑습니다.


이런 결과가 나옵니다.

배치 파일의 for문이, test.txt 파일을 열어서 각 행마다
echo 결과입니다: %%i
이런 명령을 적용한 결과입니다.




자세한 설명


for /f "delims=" %%i in (test.txt) do echo 결과입니다: %%i


/f : 파일명이 아닌, 파일 내용을 처리하라고 지시하는 옵션

"delims=" : for문으로 파일 속을 읽으면, 파일 각 행의 첫번째 공백문자 앞에서 읽기를 멈추고 다음줄로 넘어가는데, 이 옵션은 행의 끝까지 모두 읽게 하는 것입니다.

echo 결과입니다: %%i : 이것은 각 행에서 할 일을 지정하는 것입니다. 변수인 %%i 속에 자동으로 파일의 각 행이 들어갑니다.




그런데 for문의 이런 고급 기능은, 윈도우2000/XP 이상의 도스창에서만 됩니다. 윈도우98이나 MS-DOS 6.0 같은 16비트 도스에서는 안됩니다.



여담


제가 예전에, 텍스트 파일을 처리하는 이런저런 일을 할 때, C언어로 일일이 프로그래밍을 하자니 너무 힘들고 귀찮더군요. 그래서 for문으로 텍스트 파일을 대충 처리했습니다.

그렇지만 지금은 펄(Perl)로 하고 있습니다. 윈도우에서도 액티브펄(ActivePerl)을 무료로 다운받아서 설치하면 됩니다.

물론 상용 프로그램 등에 포함되어 배포될 스크립트라면, 이렇게 배치 파일로 작성하는 것도 좋은 방법일 것입니다.


▶▶ 배치파일] FOR 문 예제. for in do 사용법 - 도스 DOS Bat File 강좌

☞ BATCH(.BAT)/VBScript

배치파일] FOR 문 예제. for in do 사용법 - 도스 DOS Bat File 강좌

도스창의 각 명령어들은, *.* 등의 와일드카드(Wildcard)를 사용하여 여러 개의 파일들을 한꺼번에 처리할 수 있지만, 한 번에 1개씩만 처리할 수 있는 명령어나 프로그램들이 가끔 있습니다. 그럴 때는 각 파일에 한번씩 명령어를 적용해 주느라 아주 힘들게 됩니다. 다루어야 할 파일이 수천 개라면 알바를 고용해야 할지도 모릅니다. 이때 for 문을 사용하면, 와일드카드가 지원되지 않는 명령어/프로그램에 와일드카드를 적용시킬 수 있어 편리합니다.

즉, 배치파일의 for문은, 와일드카드가 적용되지 않는 명령어/프로그램에 와일드카드를 만들어 주는 것입니다.


for문 예제


가장 간단하고 쉬운 예제입니다. 다음의 코드를 0.bat 등의 이름으로 하드에 저장하고 실행합니다.
@echo off


for %%i in (*.*) do attrib "%%i"

이 예제는, 현재 디렉토리의 모든 파일의 속성을 화면에 한꺼번에 출력하는 것입니다. (attrib 명령은 파일이나 디렉토리의 속성을 보거나 변경하는 것인데, 와일드카드가 지원되어 한꺼번에 여러 개의 파일을 바꿀 수 있지만, 여기서는 예를 들기 위해, 그런 기능이 없다고 가정합니다. 즉 한 번에 1개의 파일만 처리할 수 있다고 생각합니다.)


실행 결과:
D:\Z>0.bat
A          D:\Z\.bashrc
           D:\Z\.bash_profile
A          D:\Z\.inputrc
A          D:\Z\0.bat
A          D:\Z\0.cpp
A          D:\Z\0.htm
A          D:\Z\0.pl
A          D:\Z\0.txt
           D:\Z\1.txt
           D:\Z\ddd Foo.java
           D:\Z\Foo.class
           D:\Z\Foo.java
     R     D:\Z\test.jpg

D:\Z>

이렇게 한꺼번에 출력되었습니다.



for문의 문법 설명


for %%i in (*.*) do attrib "%%i"


for 다음에 있는 변수는 %%i 이렇게 퍼센트 기호를 앞에 2개 붙여야 합니다. for문의 변수명은 대소문자를 구분합니다. %i와 %I는 다릅니다. 변수는 대체로 %%i 이렇게 지정하면 됩니다.

in 다음의 (*.*)은 모든 파일을 작업 대상으로 하라는 와일드카드입니다. 이 부분을 (*.txt) 이렇게 하면, 현재 디렉토리(폴더)의 "모든 .txt 확장자를 가진 파일"만 대상으로 합니다.

do 다음에는, 각 파일에 대해 실행할 명령어와 옵션을 적어주면 됩니다.

맨 마지막의 "%%i" 는, 각 파일명들이 명령어에 자동으로 대입되는 부분입니다. 큰따옴표로 둘러싸야만, "공백 있는 파일명"을 다룰 수 있습니다.



for 와 %%i 사이에 넣는 옵션들


다음 옵션들을 for 뒤에 적어 주면 작업 방식을 변경할 수 있습니다.

/d : 파일이 아닌 디렉토리들을 작업 대상으로 함

/r : 하위 디렉토리의 파일들까지 처리합니다.



for문은 배치 파일의 고급 테크닉에 사용되는 것입니다. 그래서 잘못 사용하면 위험하기도 합니다. 어떤 파일들이 처리 대상이 될지 잘 파악해야 하고, 임시 파일들을 만들어 충분히 테스트해 보아야 합니다.



도스창에서,
for /?
라고 하면, for문에 대한 더 자세한 도움말이 나옵니다.



▶▶ 배치파일] FOR문으로, 텍스트 파일 행 처리 - 도스 DOS Bat File 강좌

▶▶ C언어] cl.exe: 소스 파일 여러개 한꺼번에 컴파일하는 배치파일: Multiple Source Files Compile at Once

☞ BATCH(.BAT)/VBScript(.VBS)

Cygwin의 bashrc, bash_profile, inputrc 설정 파일들의 기본 위치는?

예를 들어, Cygwin(시그윈)

C:\cygwin

폴더에 설치하고, 현재 윈도우에 로그인한 아이디(ID)가 Administrator 라면,

C:\cygwin\home\Administrator
이 디렉토리에

.bash_profile
.bashrc
.inputrc

이 파일들이 생깁니다.


그리고 만약 윈도우의 환경변수에, HOME 이라는 이름의 변수가 있고, 그 값이 D:\myhome 일 경우에는

D:\myhome

이 디렉토리에 생기게 됩니다.





그리고

C:\cygwin\etc\defaults\etc\skel

이런 디렉토리에도 위의 파일들이 있습니다. 이것은 기본값을 가진 설정 파일들입니다. 만약 C:\cygwin\home\Administrator 에 있는 자신의 설정 파일을 다루다가 실수를 했다면, 위의 폴더의 파일들을 카피해서 사용하면 됩니다.


그리고
D:\cygwin\etc
에 있는 설정 파일들은, 개인별 설정이 아니라 컴퓨터 1대 전체에 적용되는 것입니다. 여기에 있는 파일들은 파일명 앞에 점(.)이 없습니다. 즉 히든 파일이 아닌 것입니다.


일반적으로는
C:\cygwin\home\Administrator
여기의 설정 파일들만 조정하면 됩니다.



▶▶ Linux,리눅스] .bashrc .bash_profile 설정 파일들의 위치는?

☞ 리눅스(Linux)/유닉스(Unix)/시그윈(Cygwin)

울트라 에디트 환경설정 있는 곳은? - 울트라 에디터 UltraEdit Config

울트라 에디트 상단 풀다운 메뉴에서

Advanced (고급) > Configuration (환경 설정)

을 선택하면, 사용자 환경 설정을 할 수 있는 창이 나옵니다.


다른 프로그램들은 Options 또는 Preference 라는 이름으로 환경 설정창이 나오지만, 울트라에디터는 옛날부터 Advanced (고급) > Configuration 으로 되어 있더군요.


울트라에디트의 환경 설정은 좀 복잡해서, Advanced 메뉴 속에 다른 설정들도 많이 있습니다. Configuration 아래쪽의 항목들도 모두 사용자 설정들입니다.



▶▶ 울트라에디트 사용자 환경 설정파일 위치; UltraEdit-32 Config, ini File Location

☞ 텍스트 에디터/편집기 (Text Editor)

Wednesday, September 27, 2006

시그윈(Cygwin) 미러 사이트 - 빠른 한국 사이트는? - Mirror Site

시그윈 설치 파일인 setup.exe 는 시그윈 홈페이지에서 받지만, setup.exe 가 내부적으로 사용할 미러 사이트는 사용자가 직접 지정해 주어야 합니다. 시그윈 설치 때 미러 사이트 목록이 나옵니다. 그 중에서 어느 곳을 고르느냐가 문제입니다. 미국 미러 사이트는 너무 느리기 때문에 한국 미러 사이트에서 받는 것이 좋습니다.

ftp://ftp.kreonet.re.kr
초고속연구망 KREONET

제일 빠른 미러 사이트는 여기입니다.


ftp://ftp.kaist.ac.kr
카이스트

SBS 드라마 카이스트가 아니고... 2번째로 추천할 만한 곳은 여기인데, 가끔 가다 연결이 안될 때도 있었습니다.

올해 초에는 "리눅스 사랑"이라는 사이트의 FTP가 빠르고 좋았지만 지금은 목록에서 보이지 않았습니다. 아무튼 주소 끝이 .kr 로 끝나는 한국 사이트에서 다운받는 것이 좋습니다. 어느 사이트에서 받든지 똑같은 파일들입니다. 그렇지만 허술한 미러 사이트의 파일들은 구버전이거나 깨진 파일이 있을 수 있습니다.



Q: 미러 사이트란?


어떤 파일들을 하나의 사이트에만 올려두면, 서버에 부하도 많이 걸리고 다운로드 속도도 느려집니다. 그래서 똑같은 파일들을 여러 사이트에 복사해 놓은 것을, 미러 사이트(Mirror Site) 라고 합니다. 마치 "거울에 비친 것처럼 똑같은 구조의 사이트"라는 의미입니다.

특히 리눅스용 파일들은 거의 대부분, 세계 각국에 흩어진 미러 사이트들에 올려놓습니다.



▶▶ Cygwin(시그윈)이란? Cygwin의 장단점

☞ 리눅스(Linux)/유닉스(Unix)/시그윈(Cygwin)

VBS 팁] IE에서 여러 사이트 동시에 열기, 비베 스크립트 (VBScript) 로

하루에 몇 번씩 자주 방문하는 사이트들을 하나씩 오픈하는 것은 시간 낭비이기에, 여러 개의 사이트창을 동시에 여는 스크립트를 만들었습니다. 원래 배치 파일로 만들려고 했는데, 불필요한 도스창이 뜨는 바람에, VBS로 만들 수밖에 없더군요.

다음 예제는
http://www.google.com/
https://gmail.google.com/
이런 사이트 2개를 동시에 오픈하는 방법입니다.

익스플로러 창이 2개 동시에 뜹니다.



웹사이트창 2개 한꺼번에 여는 예제


파일명: foo.vbs
Dim oShell

Set oShell = WScript.CreateObject ("WSCript.shell")

URL1 = Chr(34) & "C:\Program Files\Internet Explorer\IEXPLORE.EXE" & Chr(34) & " " & "http://www.google.com/"
URL2 = Chr(34) & "C:\Program Files\Internet Explorer\IEXPLORE.EXE" & Chr(34) & " " & "https://gmail.google.com/"

oShell.Run URL1
oShell.Run URL2

위의 코드 박스를 옆으로 스크롤하면, 맨 우측에 사이트 주소가 나타납니다. 이 주소를 자신에 맞게 수정하면 됩니다. 사이트를 더 추가하려면 URL3 이라는 변수를 만들어서 똑같이 해주면 됩니다.

그런데
C:\Program Files\Internet Explorer\IEXPLORE.EXE
이 경로에 공백이 있기에 큰따옴표로 둘러싸 주어야 하지만, 그러면 따옴표 충돌이 일어났습니다. 그래서 큰따옴표(쌍따옴표)를 Chr(34) 이런 문자로 대신 표현하여 문제를 해결했습니다.

위의 foo.vbs 파일을 탐색기에서 마우스로 클릭하면 실행됩니다.



IE6은 탭 브라우징이 안되어서 이런 스크립트를 만들어야 하지만, 파이어폭스 쪽은 간단합니다: ▶▶ 파이어폭스 팁] 한번 클릭으로, 여러 사이트 한꺼번에 열기 - Mozilla Firefox Tip




그런데 이 스크립트를 실행하면, IE메뉴의 구글 툴바가 한칸 밑으로 쳐지는 문제가 있습니다. 이유는 모르겠군요, 구글 툴바의 버그일 수도 있고 -_-?


☞ BATCH(.BAT)/VBScript(.VBS)

[QnA] 북마크는 무엇인가요? '즐겨찾기'는 어떤 사이트인가요? - Bookmark

원래, 영어에서 북마크(Bookmark)는 책갈피에 끼우는 '서표'를 의미합니다. 서점에서 책을 사면 책갈피에 끼울 작은 서표를 공짜로 주지 않습니까.

컴퓨터에서의 북마크는, 자신이 자주 찾는 사이트의 주소를 브라우저에 등록해 두는 것을 말합니다.

가령 자신이 http://news.google.co.kr/ 이라는 사이트를 매일 방문한다면, 주소창에 news.google.co.kr 이런 주소를 매일 입력하기가 불편할 것입니다.

따라서, http://news.google.co.kr/ 이 주소를 인터넷 브라우저에 북마크해 두면, 이제 마우스 클릭만으로 news.google.co.kr 에 쉽게 찾아갈 수 있겠지요.

북마크와 즐겨찾기는 같은 말입니다.


북마크 하는 법은?


인터넷 익스플로러 (Internet Explorer) 에서는, 키보드의 Ctrl+D 키를 누르면, 현재 보고 있는 사이트가 북마크됩니다. Ctrl키를 누르면서 D 키를 누르는 것입니다.

이제 브라우저 상단 메뉴의 즐겨찾기 라는 곳을 클릭해 보면, 북마크가 보일 것입니다.

만약 http://news.google.co.kr/ 이 사이트를 북마크했다면, Google 뉴스 한국 이라는 이름으로 북마크가 만들어져 있을 것입니다. Google 뉴스 한국이라는 북마크를 클릭하면 자동으로 news.google.co.kr 이 사이트로 이동합니다.



기타


북마크(즐겨찾기)는 인터넷 사이트뿐만 아니라, 윈도 탐색기 (Windows Explorer)에서, 자신이 자주 가는 특정 폴더를 북마크할 수도 있습니다. 이때는, 탐색기 메뉴에서

즐겨찾기 > 즐겨찾기에 추가

로 북마크합니다.



☞ 윈도우(WINDOWS)

윈도우XP에 필요한 메모리 용량 - 최소한/권장 용량 - Memory Requirements

윈도우XP에 필요한 최소한의 메모리는 256MB(메가)입니다. 128MB로도 겨우 돌아가긴 하지만 속도가 너무 느려서 아예 옛날의 8비트 컴퓨터를 방불케 합니다.

물론 256 MB로는 실용성이 아주 낮습니다. 최소한 512메가 정도는 되어야 그럭저럭 쓸 수 있습니다.

인터넷 서핑, 음악/영화 감상이나 엑셀/워드프로세서 등을 사용하는 일상적인 용도로는 512메가로도 충분하지만, VMware를 실행시킨다든지, 3ds Max 같은 3D그래픽을 한다든지, 또는 최신형 3D게임을 하기에는 여전히 부족한 메모리입니다.

따라서 좀더 전문적인 용도로 XP를 돌리기 위해서는 1GB (기가) 정도의 메모리는 필요합니다. 1GB 는 512MB의 2배입니다.


메모리는 다다익선이긴 하지만, 현재 널리 쓰이는 32비트 PC에는 이론적으로 4GB까지의 메모리만 장착할 수 있습니다. 그리고 현실적으로는 2GB까지만 사용할 수 있는 모양입니다. 따라서 1GB 메모리라면 아주 좋은 사양이 될 것입니다.



☞ WINDOWS

키보드에 나눗셈 곱셈 (나누기 곱하기) 기호가 없어요 / 사칙연산이란? - Divide Multiply Key

키보드의 별표(*) 기호가 곱하기 기호입니다. X 라고 하면 계산이 되지 않고 에러가 납니다. 컴퓨터에서는 X 로 곱하기를 할 수 없습니다. 반드시 별표(*)로 곱셈을 해야 합니다.

예제:

2 * 3 = 6



키보드의 빗금(/) 기호가 나누기 기호입니다. 컴퓨터에는 학교 산수책에 나오는 나누기 기호는 없습니다. 반드시 빗금(/)으로 나눗셈을 해야 합니다.

예제:

2 / 3 = 0.66666666666666666666666666666667





사칙연산(四則演算)이란,

덧셈(더하기),
뺄셈(빼기),
곱셈(곱하기),
나눗셈(나누기)

를 말하는 것입니다.



▶▶ 엑셀] 곱하기/나누기(곱셈/나눗셈) 방법, 윈도우 계산기와 엑셀(Excel)에서 사칙연산, Multiply / Divide

☞ 학습

자바/Java] 엑셀 ROUND() 함수 구현 - Excel 반올림

자바 반올림은 원칙적으로, 실수를 정수로 반올림하는 기능만 있었습니다. 그래서 실수를 지정한 소수점 자리수만큼 반올림하여 실수로 되돌려주는 함수(메소드)를 만들었습니다. 반올림 함수는 엑셀의 것이 가장 상식적이고 편리한데, 엑셀의 ROUND() 함수와 비슷하게 작동하도록 했습니다. 다만 음수 자릿수는 지정할 수 없습니다.

다음 소스 아래쪽에 정의되어 있는 excelRound() 라는 메소드가 핵심입니다.

사용법은 excelRound(실수, 소수점 자리 지정) 의 형식입니다.


소수점 자리 지정하여, 엑셀 형식으로 반올림 예제


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {
    double dResult = excelRound(1.44455555555, 4);
    System.out.println(dResult);
    // 출력 결과: 1.4446
  }


  public static double excelRound(double dNumber, int intNumDigits) {
    return Double.parseDouble(
                              String.format(
                                            "%." + Integer.toString(intNumDigits) + "f", dNumber)
                                           );
  }
}


위의 코드를 실행하면, 출력 결과가 1.4446 입니다. 그리고

엑셀에서,
=ROUND(1.44455555555, 4)
이렇게 하면
1.4446
역시 같은 결과가 나옵니다.



▶▶ 자바/Java] 정수로 반올림, 실수로 반올림 (소수점 몇째 자리까지) - Round To Long, Double

Tuesday, September 26, 2006

파일 내부 보는 프로그램은? Unicode(유니코드), MP3 등의 이진파일 - Hex Viewer

UltraEdit-32 : Hex Edit Mode


이진파일의 내부를 보려면, 위와 같은 "헥사 에디터" 또는 "헥사 뷰어"가 필요합니다.

예를 들어, 위의 그림의 경우는, 울트라에디트(UltraEdit)로 MP3 파일의 내부를 들여다본 것입니다. 그림 밑의 스크롤바를 우측으로 이동하면, 그림 우측에 Xing 이라는 문자열이 나옵니다. 이것은 그 MP3 파일을 Xing 이라는 프로그램으로 만든 흔적입니다.


유니코드 파일은 텍스트파일과 이진파일의 속성을 모두 가지고 있는 파일입니다. 유니코드 파일을 그냥 읽으려면 윈도우 메모장으로도 충분하지만, 파일 속의 구조를 보기 위해서는 역시 헥사 에디터가 필요합니다. (▶▶ 텍스트파일(아스키파일) / 이진파일(바이너리파일) 의 차이점 - Text File, Binary File 참고)

참고로, 울트라에디터의 헥사 모드로는, "UTF-8 유니코드" 파일의 내부 구조를 볼 수 없습니다. 울트라에디트는 유니코드를 내부적으로 UTF-16LE 로 변환하여 편집하기 때문입니다. 윈도우에서 Unicode 라는 것이 바로 UTF-16LE 입니다. (▶▶ 일반 유니코드(Unicode)와 'UTF-8 유니코드'의 차이점 참고)



▶▶ [QnA] 헥사 에디터란? 좋은 헥사 에디터(Hex Editor)는? : WinHex

▶▶ 헥사 코드 편집법 / 헥사 에디터(Hex Editor) 사용법 기초

☞ 텍스트 에디터

리눅스] Hex Editor (헥사 에디터) / 이진 파일 편집기 - Binary Editor

UltraEdit-32 : Hex Edit Mode

헥사 에디터라는 것은 이진 파일을 위의 그림과 같이 편집하는 것입니다. 그러나 안타깝게도 위의 그림은 윈도우용 울트라에디터의 헥사 편집 모드이고,

리눅스용 헥사 에디터는 다음과 같은 것이 있습니다.


hexedit


hexedit 라는 텍스트 모드용 헥사 편집기가 가장 유명(?)합니다. 기능은 그리 많지 않더군요. man hexedit 라고 하면 도움말이 나옵니다. 기본으로 설치되지 않을 수도 있습니다. Cygwin(시그윈)에서는 설치할 때,
Editors / hexedit 에 체크하면 됩니다.



Vim


일반 텍스트 편집기인 Vim(VI)에서 헥사 모드를 사용하는 명령어가 있습니다. Vim 에서
:%!xxd
라고 하면 현재 편집중인 파일이 헥사 모드로 나오고

:%!xxd -r
라고 하면 원래로 돌아갑니다. 그런데 편집은 원활히 되지 않더군요. 헥사 뷰어 정도의 기능이었습니다. 자세한 설명: ▶▶ Vim Vi 헥사 뷰어, 헥사 에디터 모드 명령어; Hex Viewer Hex Editor, xxd




GUI 헥사 편집기


Gnome 환경에는, ghex2 라는 헥사 에디터가 있습니다. (또한 Bless 라는 것도 있는데 GTK+ 와 Mono 등의 라이브러리를 필요로 합니다)

KDE 환경에는, KHexEdit 라는 헥사 에디터가 있습니다.


리눅스/유닉스] 디렉토리 이동 명령, 변경 방법 - Linux, Unix Directory Command

Q: 리눅스/유닉스/Cygwin 프롬프트에서 경로 변경 방법은?


cd 명령으로 디렉토리를 이동할 수 있습니다.


하위 디렉토리로 이동


z 라는 이름의 하위 디렉토리로 가려면
cd z
이렇게 합니다.


상위 디렉토리로 이동


cd ..
이렇게 합니다. 마침표 2개입니다. 그러나 cd.. 이렇게 점2개를 붙이면 안 됩니다. (윈도우에서는 되지만)


루트 디렉토리로 이동


최상위 디렉토리로 이동하려면
cd /
이렇게 합니다. 슬래쉬 기호입니다.


특정 디렉토리로 이동


예를 들어, /usr/bin 디렉토리로 이동하려면
cd /usr/bin
이렇게 합니다.


직전 디렉토리로 이동


방금 전에 있던 디렉토리로 다시 되돌아가려면
cd -
이렇게 합니다. 마이너스 기호입니다.


자신의 홈(home) 디렉토리 이동


물결무늬(~)가, 자신의 ID 명의의 홈 디렉토리를 의미하므로
cd ~
이렇게 하면 됩니다.


현재 디렉토리 이름 확인


지금 위치한 디렉토리명을 알려면
pwd
이렇게 합니다.



▶▶ 리눅스] 디렉토리 만들기 명령, 디렉토리(폴더) 지우기 명령어: Make, Delete Directory

☞ 리눅스(Linux)/유닉스(Unix)/시그윈(Cygwin)

VMware Tools 최신 버전 얻는 방법은? Download 방법은?

VMware Tools의 최신 버전은 별도로 다운로드 받는 것이 아니라, VMware 안에 들어 있습니다.

즉 VMware 를 최신 버전으로 다운받으면, 그 안에 "VMware Tools" 도 최신 버전으로 들어 있는 것입니다.

VMware를 버전업했을 때에는, 기존에 만들어 두었던 가상머신들 속의, VMware Tools 도 업그레이드해 주어야 합니다.


가상OS를 실행한 후

VMware 메뉴: VM > Install VMware Tools

라는 곳을 클릭하면

Installing the VMware Tools package will greatly enhance graphics and mouse
performance in your virtual machine.
WARNING: You cannot install the VMware Tools package until the guest operating
system is running. If your guest operating system is not running, choose Cancel and install
the VMware Tools package later.

    Install         Cancel

이런 메시지가 나오는데, "VMware Tools 를 설치하면 그래픽과 마우스 속도가 매우 향상된다. 가상머신이 실행된 상태여야 VMware Tools 를 인스톨할 수 있다"는 의미입니다. 이미 가상OS를 실행했다면 Install 버튼만 눌러주면 됩니다.


주의점


그런데 인스톨이 잘 되지 않는 경우가 많습니다. 이때는 가상OS속의 가상 CD-ROM 안에서 VMware Tools 설치 파일을 찾아 직접 실행시켜야 합니다.

기존의 시디롬 대신에 "VMware Tools" 라는 라벨의 가상 시디가 임시로 들어 있습니다.

즉, VMware Tools 는 가상OS의 가상CD-ROM 안에 들어 있습니다. 일반 프로그램들의 설치 파일과 같은 형식입니다.


☞ VMware

자바/Java] 정수로 반올림, 실수로 반올림 (소수점 몇째 자리까지) - Round To Long, Double

자바: 소수점 반올림 예제


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {


////////////////////////////////////////////////////////////////////////
// 실수를 정수로 반올림
////////////////////////////////////////////////////////////////////////
  long iL;

  // 자바 실수는 double형이 기본이며, 실수를 넣으면 long 즉 64비트 정수로 반올림
  iL = Math.round(1.4999999999999999);
  System.out.println(iL);
  // 결과: 2

  // 9를 한 개 줄이면 1로 됨
  iL = Math.round(1.499999999999999);
  System.out.println(iL);
  // 결과: 1



  // 1.5F 이렇게 float형을 넣으면 int 즉 32비트 정수로 반올림
  int i = Math.round(1.5F);
  System.out.println(i);
  // 결과: 2



////////////////////////////////////////////////////////////////////////
// 실수를 소수점 몇째 자리까지 반올림하여 실수로 만들기
////////////////////////////////////////////////////////////////////////

  // 화면으로 곧바로 반올림 출력 (소수점 2째자리까지 나오게)
  System.out.format("%.2f%n", 1.455555);
  // 결과: 1.46



  // 소수점 3째자리까지 나오게 반올림하여 숫자로 만들기
  double d = Double.parseDouble(String.format("%.3f", 1.4455555));
  System.out.println(d);
  // 결과: 1.446


  }
}


이 예제는 자바 1.5 이상에서만 컴파일이 될 것입니다.




이것은 엑셀 스타일로 반올림을 합니다: ▶▶ 자바/Java] 엑셀 ROUND() 함수 구현 - Excel 반올림

☞ 자바

펄/Perl] 2차원 배열 만들기 / 배열의 배열 / 초기화 방법 - Array of Arrays

이차원 배열 예제


@AoA 라는 2차원 배열을 만들어, 내용을 출력하는 방법입니다.
#!/usr/bin/perl
use strict; use warnings;


  my @AoA = (
             [ "0번째 배열 0번째 요소", "0번째 배열 1번째 요소" ],
             [ "1번째 배열 0번째 요소", "1번째 배열 1번째 요소", "1번째 배열 2번째 요소" ],
             [ "2번째 배열 0번째 요소", "2번째 배열 1번째 요소" ],
            );

    print $AoA[0][0], "\n";
    # 출력 결과: 0번째 배열 0번째 요소

    print $AoA[1][2], "\n";
    # 출력 결과: 1번째 배열 2번째 요소


    # 변수로 요소 지정
    my $x = 2;
    my $y = 1;
    print $AoA[$x][$y], "\n";
    # 출력 결과: 2번째 배열 1번째 요소


    # 요소의 값 변경
    $AoA[1][1] = "안녕하세요";
    print $AoA[1][1], "\n";
    # 출력 결과: 안녕하세요


    # 새 요소 추가
    $AoA[10][10] = "ㅎㅎ";
    print $AoA[10][10], "\n";
    # 출력 결과: ㅎㅎ


    # 숫자 대입
    $AoA[10][10] = 123;
    print $AoA[10][10], "\n";
    # 출력 결과: 123


C언어와 달리, 펄에서는 배열/요소의 크기, 데이터형 같은 것은 신경쓸 필요없습니다.

▶▶ [펄 기초] Perl 의, Hash (해쉬/해시) 정의, 사용법

☞ Perl

배치파일] 도스창 닫기 명령 / 명령프롬프트창 종료 명령어 - .BAT DOS Batch File

배치 파일 내에서 자동으로 도스창(명령 프롬프트)을 닫고 싶을 때에는. exit 이라는 명령을 사용합니다.

다음과 같은 코드를 0.bat 등의 이름으로 저장한 후, 도스창에서 실행시키면 즉시 도스창이 닫혀 버립니다.

배치파일: DOS창 자동 닫기 예제


@echo off

rem 여기에 각종 명령어가 위치

exit


이것은 배치 파일 내에서만 아니라, 도스창의 프롬프트에서 exit 이라고 치면 즉시 도스창이 종료됩니다.

exit 이라는 명령 자체가 도스창을 종료시키는 명령입니다.




잠시 멈춘 후 DOS창 자동 닫기


@echo off

rem 여기에 각종 명령어가 위치

pause
exit

이것은 도스창을 닫기 전에, 화면을 잠시 멈추게 하는 방법입니다.


☞ BATCH(.BAT)/VBScript

Monday, September 25, 2006

C언어, C++ 에디터 / 통합환경(IDE)으로 좋은 프로그램은? - QnA

윈도우의 비주얼C++ 의 경우


요즘 윈도우용 프로그램을 작성할 때에는 대부분 마이크로소프트의 비주얼C++를 사용합니다. 비주얼 스튜디오 안에 비주얼C++가 들어 있기에, 비주얼 스튜디오를 구입 또는 무료 버전을 다운받으면 됩니다.
비주얼 스튜디오 익스프레스: Visual C++ 2005 Express
Visual C++ 2005 Express : 클릭하면 확대

위의 그림에서 보듯이 아주 깔끔하고 속도도 빠르고 기능도 풍부합니다. 에디터라기보다는 통합환경(IDE)이라고 불립니다. (▶▶ [희소식] 비주얼 스튜디오 무료화 / Visual C++ 2005 Express 등등 참고)


그러나 간단한 C/C++ 소스 편집에는 위와 같은 거대한 통합환경보다, 울트라에디트(UltraEdit) 같은 "프로그래머용 에디터"가 편리할 것입니다. 울트라에디터에서 C소스를 편집하고, 도스창(명령 프롬프트)에서, cl.exe 로 컴파일하는 것입니다. (▶▶ Visual C/C++ 명령행 컴파일러로 컴파일하기 - cl.exe 참조)




리눅스의 gcc용 편집기


리눅스의 C언어 컴파일러인 gcc용 에디터는 Vim(VI)이 가장 적합합니다.

물론 Vim 은 C++ 전용 편집기가 아닌 만능 텍스트 편집기입니다. 그렇지만 프로그래밍에 최적화되어 있습니다.



☞ C/C++

자바/Java] 2진수, 8비트씩 나누어 출력, 앞쪽 공백 제로(0)로 채우기

▶▶ 자바/Java] 십진수를 이진수로 변환 - 10진수 / 2진수(Binary) 진법 <- 이 게시물의 이진수 출력은 앞의 빈 칸 (Leading Zeros) 을 0으로 채우지 않고, 그리고 32비트가 한덩어리로 되어 있어서 읽기에 불편합니다.

따라서 기다란 2진수 문자열을 8자씩 나누어,

01110100 01011011 00010001 10001010

이런 식으로 알기 쉽게 출력하는 프로그램을 만들어 보았습니다.


n 이라는 변수에, 필요한 int 정수 즉 32비트 정수를 기입하고 컴파일하면 결과가 나옵니다.


2진수 읽기 쉽게 출력


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {

    int n = 1952125322;




    String s = "", s2 = "";

    for (int i = 0; i < Integer.numberOfLeadingZeros(n); i++) s += "0"; // 0을 빈자리 개수만큼 만들어 전진 배치
    s += Integer.toBinaryString(n); // 10진수를 2진수화하여 합치기

    for (int i = 0; i < 32; i+= 8) s2 += s.substring(i, i + 8) + " "; // 2진수를 8개씩 공백으로 나누어 묶기

    System.out.println(s2);



    // 출력 결과 예제
    //
    // 1952125322 의 이진수 출력: 01110100 01011011 00010001 10001010

    // 0          의 이진수 출력: 00000000 00000000 00000000 00000000
    // 0xF        의 이진수 출력: 00000000 00000000 00000000 00001111
    // 0xFF       의 이진수 출력: 00000000 00000000 00000000 11111111
    // 0xFFF      의 이진수 출력: 00000000 00000000 00001111 11111111
    // 0xFFFF     의 이진수 출력: 00000000 00000000 11111111 11111111
    // 0xFFFFF    의 이진수 출력: 00000000 00001111 11111111 11111111
    // 0xFFFFFF   의 이진수 출력: 00000000 11111111 11111111 11111111
    // 0xFFFFFFF  의 이진수 출력: 00001111 11111111 11111111 11111111
    // 0xFFFFFFFF 의 이진수 출력: 11111111 11111111 11111111 11111111

  }
}



비트 연산을 할 때에는 이런 식의 출력이 편리할 것입니다.


☞ 자바

윈도우 도스창에서 정규식 사용법 - Windows XP regex FINDSTR

윈도우2000이나 윈도우XP에는 findstr 이라는 명령어가 있습니다. 이것으로 정규식을 사용하여 파일 속의 문자열을 찾을 수 있습니다. 즉 윈도우용 grep 인 것입니다. (▶▶ [grep.exe] 유닉스/리눅스의 grep 을 윈도우에서 사용하기: 문자열 찾기 참조)

윈도우의 도스창(명령 프롬프트)을 열고,

findstr foo *

라고 하면, 현재 디렉토리의 모든 문서에서, foo 라는 문자열이 들어 있는 문서를 찾아서 그 행을 보여 줍니다. 이것은 일반 문자열 찾기이고, 정규식을 사용하려면 가령

findstr \^foo$ *

이것은 ^foo$ 라는 정규식을 사용한 예입니다. 정규식에서 ^ 은 행의 처음, $는 행의 마지막을 의미하기에, ^foo$ 의 의미는, foo 로만 이루어진 행을 찾으라는 뜻이 됩니다. 그렇지만 윈도우에서 ^ 이런 캐럿 기호는 특수한 의미로 사용되는 문자이기에, ^ 앞에 백슬래쉬(\)를 붙여서 이스케이프해 주었습니다.


만약
<foo>
라는 문자열을 찾으려면

findstr ^<foo^> *

이렇게 이스케이프해 주어야 합니다. 도스창에서 <> 기호는 재지향에 사용되는 특수기호이기 때문입니다.

실은 도스창의 이스케이프 기호가 바로 ^ 입니다.



정규식은, 도스창에서 파일 속의 문자열 찾기에만 쓰이는 것이 아니라, 텍스트 에디터에서 문자열 찾기와 치환에 더 널리 사용됩니다. ☞ 정규식/정규표현식 참조



▶▶ [윈도우용 grep] find 보다 더 강력한 findstr 명령


☞ BATCH/VBScript

자바/Java] Exception in thread 'main' java.lang.NoClassDefFoundError: Foo/class

Q: 자바를 컴파일한 후, 실행시키려면 Exception in thread "main" java.lang.NoClassDefFoundError: Foo/java 이런 에러가 납니다. 원인은 무엇입니까?

A: 대부분의 경우, 파일명을 잘못 입력했기 때문입니다.

예를 들어, Foo.java 라는 소스를 컴파일하여, Foo.class 라는 파일을 만든 후, Foo.class 를 실행시킬 때는,

java Foo

라고 해주어야 합니다.


D:\Z>java Foo.java
Exception in thread "main" java.lang.NoClassDefFoundError: Foo/java
에러! .java 라는 확장자를 붙였음 (이것은 소스 파일이니 당연히 에러가 남)

D:\Z>java Foo.class
Exception in thread "main" java.lang.NoClassDefFoundError: Foo/class
에러! .class 라는 확장자를 붙였음 (심지어 class 확장자도 안됩니다.)

D:\Z>java foo
Exception in thread "main" java.lang.NoClassDefFoundError: foo (wrong name: Foo)
에러! 자바는 항상 대소문자를 엄격히 구분합니다. 리눅스뿐 아니라 윈도우에서도 구분합니다.
따라서 Foo 를 foo 라고 적으면 안됩니다.

D:\Z>java wrir5uedrdu5eu5euer
Exception in thread "main" java.lang.NoClassDefFoundError: wrir5uedrdu5eu5euer
에러! 파일명 오타이거나, 아예 존재하지 않는 파일을 실행하려 했을 때


컴파일을 하지 않아서 Foo.class 라는 파일이 없을 때에도 그런 에러가 납니다.

자바는 컴파일 언어이기에 우선 컴파일을 해야 합니다.




따라서 소스 파일명이 Foo.java 라면, 도스창(명령 프롬프트)에서, 컴파일하고 나서
java Foo
이렇게 하면 에러 없이 잘 실행됩니다.




CLASSPATH 환경변수의 문제


이것은 좀 드문 경우입니다. CLASSPATH 환경변수를 잘못 지정하면, 현재 디렉토리에 .class 파일이 있어도 찾지를 못하게 되어 위의 에러가 발생합니다.

가령, 자신이 개발한 자바 클래스들을 넣어두는 폴더가
D:\myhome\java
라고 할 때, CLASSPATH 는

CLASSPATH=.;D:\myhome\java

이렇게 지정해야 합니다. 즉 앞에 점(.)이 있어야 합니다. 마침표(.)는 "현재 디렉토리"를 의미합니다.

그냥
CLASSPATH=D:\myhome\java
이렇게 지정해 주면, 자바 실행기는 현재 디렉토리의 .class 파일을 찾지 않게 되고, 그래서 위의 에러가 발생합니다.


도스창에서
set
이라고 치면 현재 환경변수들이 출력됩니다.


자바 1.5의 경우에는 CLASSPATH 환경변수가 없어도 되기에, 초보자의 경우에는 CLASSPATH 를 지정할 필요가 없습니다. (이 경우 CLASSPATH 환경 변수를 삭제하면 문제가 없어집니다.)

다만 자신의 라이브러리가 있을 때에는 CLASSPATH 를 지정해야 하는데, "마침표+세미콜론(;)"을 찍고 그 뒤에 디렉토리를 적어 줍니다.


윈도우에서, 환경변수 변경 방법은 여기에 있습니다: ▶▶ '환경변수'란 무엇인가요? 환경변수 변경/추가/삭제하는 법은? - Environment Variable


주의!

도스창에서 그냥 set 명령으로 환경변수를 변경하면, 그 설정이 윈도우에 저장되지 않습니다. 도스창을 종료하면 설정도 사라집니다. 따라서 위의 방법대로 변경해야 합니다. 그러고 나서 현재의 도스창을 종료하고, 다시 도스창을 띄운 후 자바를 실행해 보시기 바랍니다.



▶▶ [Java/자바 기초] java 소스 컴파일하고, class 실행하기

☞ 자바

딜리셔스 팁] 태그(Tag) 분류, 카테고리(번들)로 묶기 - del.icio.us bundle Tip

딜리셔스(del.icio.us)에 북마크를 하면, 그 북마크마다 태그(Tag)를 붙여서 분류할 수 있습니다.

그런데 딜리셔스를 많이 사용하다 보면, 태그가 너무 많아져서, "태그 자체도 또한 분류"를 해야 합니다.

딜리셔스에서는 태그 분류를 번들(bundle; 묶음, 꾸러미) 이라고 부르더군요.


태그 묶음 (번들) 만들기


예를 들어, music 이라는 태그를, COOL 이라는 묶음 속에 넣는 방법입니다.

* 딜리셔스 우측에, tag options (태그 옵션) 라는 곳에, bundle tags (태그 묶음 만들기) 라는 곳이 있습니다. 그곳을 클릭합니다.

* 화면 좌측에, new bundle: (새 번들) 이라는 입력창에, COOL 이라고 적고 "create (만들기)" 버튼을 누릅니다.

* 넓은 입력창이 나오고, 그 밑에 music 이라는 태그의 링크가 있을 것입니다. 원래는 music 이라는 링크를 클릭하면, 자동으로 COOL 이라는 카테고리(번들)에 들어가야 하겠지만, 버그가 있는지 잘 되지 않습니다. 따라서 입력창에 직접 music 이라고 적어 줍니다.

* 이제 music 이라는 태그가 붉게 변하며, COOL 에 속했다는 것을 나타냅니다. (member of COOL)

반면 COOL 에 속하지 않은 태그들은 푸른 링크를 그대로 가지고 있습니다. (member of another bundle)

* save changes (저장) 버튼을 누릅니다.

* 딜리셔스 화면 상단의, your bookmarks 라는 곳을 클릭하여, 자신의 딜리셔스 홈페이지로 가면, 이제 music 이라는 태그가 COOL 이라는 카테고리에 속해 있는 것이 보입니다.

그리고 어떤 카테고리(번들;묶음)에도 속하지 않은 태그들은 unbundled tags 에 소속됩니다.


<결과 예제 보기>





카테고리(번들) 이름 변경


* 딜리셔스 화면 우측의 bundle tags 를 클릭.

* (번들이 여러 개 있을 경우) 이름을 변경할 번들을 클릭하여 선택. 여기서는 아까 만든 COOL 을 선택했습니다.

* 좌측의 rename COOL to: 라는 입력창에, HOT 등의 이름을 넣고, rename (이름 변경) 버튼을 클릭하면, 이제 COOL 카테고리가 HOT 으로 변합니다. COOL 에 속한 태그들의 소속은 자동으로 HOT 으로 변경됩니다.



카테고리(번들) 삭제


* 딜리셔스 화면 우측의 bundle tags 를 클릭.

* (번들이 여러 개 있을 경우) 지울 번들을 클릭하여 선택.

* 좌측의 delete this bundle 버튼을 누릅니다. 대화상자에서 "OK" 버튼을 누르면 지워집니다.



☞ 딜리셔스(del.icio.us)

☞ Web

Sunday, September 24, 2006

[QnA] Pause / Break, Shift 키의 아스키코드(ASCII Code) 값은?

Pause 키나 Break 키에는 아스키 코드 값이 없습니다.

눌렀을 때 글자가 찍히는 키에만 아스키 코드 (ASCII Code) 값이 있습니다. Enter 키나 Tab키는 비록 보이지는 않지만 글자가 찍히긴 찍힙니다. 따라서 Enter 키의 아스키 코드 값은 10진수로 13이고, Tab키의 아스키 코드 값은 10진수로 9 입니다. 정확하게 말하자면 키의 아스키 값이 아닌, 키가 만들어 내는, 개행문자와 탭문자의 아스키 값입니다.


다만, Pause 키나 Break 키에는 "스캔 코드 (Keyboard Scan Codes)" 라는 것이 있습니다. 이 스캔 코드 값을 이용하여, Pause 키나 Break 키가 눌러졌나 안 눌러졌나를 판별합니다.

물론 스캔 코드라는 것은, 모든 키가 다 가지고 있습니다. 즉 글자가 찍히는 키도 스캔 코드 값이 있습니다. 그런데 스캔 코드는 아스키 코드와 달리 절대적인 것인 아닌 데다 엄청나게 복잡합니다... +_+;

자바/Java] 십진수를 이진수로 변환 - 10진수 / 2진수(Binary) 진법

10진수 16진수를, 2진수로 변환하여 출력 예제


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {

    // 10진수 또는 16진수를, 2진수로 변환 출력 (32비트 정수)
    System.out.println(Integer.toBinaryString(0)); // 0
    System.out.println(Integer.toBinaryString(1)); // 1
    System.out.println(Integer.toBinaryString(255)); // 11111111
    System.out.println(Integer.toBinaryString(0xFFFF)); // 1111111111111111
    System.out.println(Integer.toBinaryString(0xFFFFFFFF)); // 11111111111111111111111111111111
    System.out.println(Integer.toBinaryString(0xFFFFFFFF - 1)); // 11111111111111111111111111111110

    // 이진수 앞의 빈자리는 0으로 채워지는데, 그 0의 숫자입니다.
    System.out.println(Integer.numberOfLeadingZeros(1)); // 31

  }
}


이진수는 System.out.format()으로 출력이 안되더군요. 그래서 다루기가 힘들었습니다.



2진수를 보기 좋게 출력하는 방법이 여기에 있습니다:
▶▶ 자바/Java] 2진수, 8비트씩 나누어 출력, 앞쪽 공백 제로(0)로 채우기



▶▶ 자바/Java] 10진수, 16진수로 변환 출력 - 십진수 십육진수(헥사;Hex)


16진법 2진법 10진수, 아스키 유니코드 상호 변환기: ▶▶ 16진수 헥사, 2진수, 10진수, 8진법 변환 계산기; Hex Calc

자바/Java] 10진수, 16진수로 변환 출력 - 십진수 십육진수(헥사;Hex)

16진수(헥사;Hex) 변환 출력 예제


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {

    // 10진수를 16진수로 출력: 가장 간단한 방법 ㅎㅎ
    System.out.format("%02X%n", 255);  // FF
    System.out.format("%02x%n", 255);  // ff
    System.out.format("%X%n"  , 10);   // A


    String s = String.format("%02X%n", 10); // 16진수 문자열로 변환
    System.out.println("문자열로 만들어서 출력: " + s); // 문자열로 만들어서 출력: 0A


    // 10진수를 16진수로: 불편한 방법
    System.out.println(Integer.toHexString(255)); // ff
    System.out.println(Integer.toHexString(255).toUpperCase()); // 대문자로: FF
    System.out.println(Integer.toHexString(10).toUpperCase()); // A

  }
}



%X : 헥사를 대문자로
%x : 헥사를 소문자로
%02X : 2자리 헥사를 대문자로, 그리고 1자리 헥사는 앞에 0을 붙임
%n : 다음줄로 줄바꿈하기


System.out.format()은 C언어의 printf 함수와 같은 역할을 하기에 10진수를 16진수로 간단히 출력할 수 있습니다. ▶▶ 자바/Java] printf(), sprintf() 함수 포맷 출력 구현, System.out.println()으로

Integer.toHexString() 이것은 헥사 값을 마음대로 조작하기 어렵더군요.



▶▶ 자바/Java] 십진수를 이진수로 변환 - 10진수 / 2진수(Binary)

▶▶ Java/자바] 16진수 상수 FF, 10 표현 방법; Hexadecimal Literal

16진법 2진법 10진수 상호 변환기 (온라인 버전):
▶▶ 16진수 헥사, 2진수, 10진수, 8진법 변환 계산기; Hex Calc

Perl/펄] 숫자 비교 예제, if문으로 - Compare Numbers

펄에서의 숫자 비교는 다른 언어와 같고, 어려운 점은 없습니다.

다만 펄의 == 연산자는 숫자만 비교할 뿐, 문자열은 비교할 수 없습니다. 문자열 비교에는 eq 연산자를 사용합니다. (▶▶ 펄/Perl] 문자열 비교, eq, ne / 정규식 비교 - Compare Strings / regex 참고)


숫자 비교 예제


#!/usr/bin/perl
use strict; use warnings;

##################################
## 동일한 숫자인지 비교
##################################
  my $num = 123;

  if ($num == 123) {
    print "같은 숫자군요!\n";
  } else {
    print "다른 숫자군요!\n";
  }
  # 결과: 같은 숫자군요!



##################################
## 큰 숫자인지 비교
##################################
  $num = 123;

  if ($num > 100) {
    print "\$num이 크군요!\n";
  }

  # 결과: $num이 크군요!


##################################
## 작은 숫자인지 비교
##################################
  $num = 123;

  if ($num < 200) {
    print "\$num이 작군요!!\n";
  }

  # 결과: $num이 작군요!!



##################################
## 크거나 같은 숫자인지 비교
##################################
  $num = 123;

  if ($num >= 100) {
    print "\$num이 크거나, 서로 같은 숫자군요!\n";
  }

  # 결과: $num이 크거나, 서로 같은 숫자군요!




##################################
## 작거나 같은 숫자인지 비교
##################################
  $num = 123;

  if ($num <= 200) {
    print "\$num이 작거나, 서로 같은 숫자군요!\n";
  }

  # 결과: $num이 작거나, 서로 같은 숫자군요!




☞ Perl

펄/Perl] 문자열 비교, eq, ne / 정규식 비교 - Compare Strings / regex

펄에서 문자열(연속된 문자) 비교에는 eq 연산자를 사용합니다.


문자열 비교 예제


#!/usr/bin/perl
use strict; use warnings;

########################################################################
## eq 로 문자열 비교
########################################################################
  my $foo = "똠방";

  if ($foo eq "똠방") {
    print "똠방: 같은 문자열이군요!\n";
  } else {
    print "똠방: 다른 문자열이군요!\n";
  }
  # 숫자가 아닌, 문자열은 == 이런 등호 2개로 비교할 수 없습니다.
  # 반드시 eq 를 사용해야 합니다.
  # 결과: 똠방: 같은 문자열이군요!



  if ("foo" =~ /FOO/i) { print "foo와 FOO는 같은 문자열이군요!\n"; }
  # 대소문자 구분없이 비교
  # 결과: foo와 FOO는 같은 문자열이군요!
  # 정규식에 i 옵션을 붙이면 대소문자 구분없이 비교


  if ($foo ne "하하하") { print "하하하: 다른 문자열이군요!\n"; }
  # ne 는, 정반대로, 다른 문자열이라면 참(true)이 됩니다.
  # 결과: 하하하: 다른 문자열이군요!



########################################################################
## 정규식으로 문자열 비교
########################################################################
  my $bar = "각하";

  if ($bar =~ /^각하$/) {
    print "(정규식으로) 같은 문자열이군요!\n";
  } else {
    print "(정규식으로) 다른 문자열이군요!\n";
  }
  # 위의 if문은 ^각하$ 라는 정규식을, 변수인 $bar 의 내용과 비교합니다.
  # 결과: (정규식으로) 같은 문자열이군요!




▶▶ Perl/펄] 숫자 비교 예제, if문으로 - Compare Numbers

☞ Perl

☞ 정규식

자바/Java] 동적 배열 크기 확장 조절 / 숫자 문자열 혼합 배열 만들기 - Perlish Array

자바의 배열은 정적입니다. 미리 크기가 정해져 있기에, 나중에 요소를 추가할 수 없습니다. 만약 추가한다면 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 이런 에러가 나게 됩니다.

텍스트 파일 등을 다룰 때는, 펄(Perl)의 배열처럼, 실시간으로 늘어나는 배열이 편리합니다.

펄의 배열은 크기 제한이 없어서, 실행시에 아무 값이나 넣어도 고무줄처럼 쭉쭉 늘어나게 됩니다. 그리고 문자열과 숫자를 한꺼번에 넣을 수도 있습니다.

그래서 자바의 ArrayList 를 사용해서, 펄 스타일의 배열을 구현해 보았습니다. 적어도 제가 보기로는 펄의 배열과 똑같이 잘 작동했습니다. (자바 1.5 버전에서 테스트했습니다.)


oPerlishArray 라는 배열에 add() 메소드로 요소들을 마음대로 추가하면, oPerlishArray 배열의 크기가 자동으로 늘어나게 됩니다. 인덱스 번호로 지정하지 않고, 그냥 뒤쪽에 요소들이 추가됩니다.

펄에서 흔히 그렇게 하듯, 텍스트 파일을 통째로 배열에 넣어서 처리할 때 편리할 것입니다.

그런데 이런 동적 배열은 속도가 떨어지고 메모리 관리도 비효율적이기에, 꼭 필요한 경우에만 사용해야 합니다. 물론 텍스트 파일 처리 등에서는 퍼포먼스가 떨어지더라도 차이를 체감할 수는 없을 것입니다.


ArrayList 예제: 배열 요소 추가, 배열 크기 조절 Array Resize


파일명: Foo.java
import java.util.*;

public class Foo {
  public static void main(String args[]) {

    List<Object> oPerlishArray = new ArrayList<Object>();

    // 배열 요소 몇 개 채우기, 문자열 숫자 가리지 않고
    oPerlishArray.add(123);
    oPerlishArray.add("하하하");

    // 이제는 배열 요소 (숫자) 한꺼번에 채우기
    for (int x = 10; x <= 100; x++) oPerlishArray.add(x);


    // 배열 출력
    for (int i = 0; i < oPerlishArray.size(); i++)
      System.out.format("[%d] = %s%n", i, oPerlishArray.get(i));

  }
}



배열에 정수만을 넣기 위해서는
List<Integer> oPerlishArray = new ArrayList<Integer>();
이렇게 <Integer> 로 변경합니다.

문자열만 넣으려면 다음과 같이 합니다.
List<String> oPerlishArray = new ArrayList<String>();

펄(Perl)처럼 모든 타입을 가리지 않고 넣으려면 다음과 같이 합니다.
List<Object> oPerlishArray = new ArrayList<Object>();



<Integer> <Object> <String> 이런 것은, 어떤 타입의 데이터가 저장될지 명시하는 것입니다.

만약 <String> 즉 문자열 데이터로 지정한 후에, 정수를 넣으면 다음과 같은 에러가 발생하게 됩니다.

Foo.java:11: cannot find symbol
symbol  : method add(int)
location: interface java.util.List<java.lang.String>
    oPerlishArray.add(123);
                 ^
Foo.java:15: cannot find symbol
symbol  : method add(int)
location: interface java.util.List<java.lang.String>
    for (int x = 10; x <= 100; x++) oPerlishArray.add(x);
                                                 ^
2 errors




만약 타입을 정의하지 않으면 이런 경고가 나옵니다.

Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.





위의 예제 실행 결과:
(2번 인덱스부터가, for문을 사용해, 대량으로 입력한 것임)
[0] = 123
[1] = 하하하
[2] = 10
[3] = 11
[4] = 12
[5] = 13
[6] = 14
[7] = 15
[8] = 16
[9] = 17
[10] = 18
[11] = 19
[12] = 20
[13] = 21
[14] = 22
[15] = 23
[16] = 24
[17] = 25

...중략...

[87] = 95
[88] = 96
[89] = 97
[90] = 98
[91] = 99
[92] = 100




☞ 자바(Java)

Saturday, September 23, 2006

자바/Java] 문자열 숫자 배열, 정렬(소팅;소트) 예제; Sort

Arrays.sort: 한글 문자 가나다순으로, 숫자를 크기 순으로 정렬(Sorting)


파일명: Foo.java
import java.util.Arrays;

public class Foo {
  public static void main(String args[]) {


    // 문자열 배열 정렬 (가나다 순으로 소팅)
    String s[] = {  "맹구",
                  "배용준",
                  "땡칠이",
                  "장동건",
                  "강수정",
                  "송창식",
                  "황당해",
                  "고은아"};

    Arrays.sort(s);
    System.out.println(Arrays.toString(s));
    // 결과: [강수정, 고은아, 땡칠이, 맹구, 배용준, 송창식, 장동건, 황당해]






    // 숫자 배열 정렬
    double num[] = {               -1000,
                     0.07890264912715708,
                                     0.2,
                    -0.18441624291164838,
                                       0,
                                     123,
                                    -0.1,
                                    -0.1,
                                    1000,
                                  0.4999};

    Arrays.sort(num);
    System.out.println(Arrays.toString(num));
    // 결과: [-1000.0, -0.18441624291164838, -0.1, -0.1, 0.0, 0.07890264912715708, 0.2, 0.4999, 123.0, 1000.0]
  }
}


정수와 실수를 섞어 넣으면, 정수도 double형 실수로 변환되어 출력됩니다.



영문 문자열 배열, 대소문자 구분없이 정렬: ▶▶ Java/자바] 대소문자 구분 없이 정렬, 문자열 배열 소팅; Sort Ignore Case, String Array


▶▶ Java/자바] 문자열 배열 내림차순(역순) 정렬(소팅/소트); Sort Descending Order, String Array

▶▶ Java/자바] 숫자 정수(int) 배열 내림차순(역순) 정렬(소팅/소트); Sort Descending Order, int Array

문자열 가나다순 정렬 툴: ▶▶ 가나다순 정렬, 문자 단어 문자열 소팅 소트 변환기; Sort Strings Tool

EmEditor 이엠에디터] 줄번호, 행번호(줄 번호, 행 번호; Line Numbers) / 눈금자(Ruler) 나타내기

(EmEditor 버전 6을 기준으로 설명)

EmEditor(이엠에디터)에서, 행번호(줄번호) 나타내기


* EmEditor 상단 메뉴에서,

Tools (도구)  > Properties for All Configurations

를 선택합니다.

참고로, "Properties for All Configurations"는, 모든 종류의 파일에 대해 일괄적으로 한꺼번에 설정을 변경하는 것입니다. 이것이 편리할 것입니다.

(반면, "Properties for Current Configuration" 은, 현재 편집 중인 종류의 파일에 대한 설정만 바꿉니다. 만약 현재 txt 파일을 편집중이라면, cpp 파일이나 html 파일을 편집할 때의 설정은 전혀 변경되지 않습니다.)

* 설정창에서, General (일반) 탭을 클릭.

* Show Line Numbers (행번호 보이기) 에 체크하고, "확인" 버튼을 누르면, 편집창 좌측에 행번호들이 나타날 것입니다.


화면에, 눈금자(줄자) 나타내기


위의 설정창에서, Show Ruler (자 나타내기) 에 체크하면, 편집창 위쪽에 눈금자가 나옵니다.

이것은 칼럼(Column)을 나타내는 자입니다. 칼럼이란, 커서의 수평 방향의 위치입니다.


행 번호, 줄 번호 추가 유틸리티 (온라인 버전): ▶▶ 행번호 줄번호 붙이기 툴; 소스 텍스트 파일 각행마다; Text Line Number Tool

EmEditor

HTML] 중국어 간체 표현, 유니코드(UTF-8) 웹페이지에, Chinese (Simplified) - lang='zh-CN'

한글과 섞인 중문 간체 문자열을 유니코드(UTF-8) 페이지에 제대로 표현하려면, 사용 언어가 "중문 간체"라고 브라우저에 명시적으로 알려주는 것이 좋습니다.

간체 문자열을 둘러싼 태그 속에
lang="zh-CN"

이런 속성을 집어 넣으면 됩니다. zh-CN 이라는 것이 중국 본토의 간체를 의미하는 것입니다. 그렇지만 zh-CN 은 언어의 종류를 말할 뿐, 페이지 인코딩까지 지정하는 것은 아닙니다.


한글과 섞인 간체 표현 예제


주의: 다음의 HTML 코드는 반드시 유니코드(UTF-8)로 저장되어야 합니다.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>페이지 제목</title>
</head>

<body>

장춘(長春)을 <span lang="zh-CN" style="font:24pt MingLiU;">长春</span> 이렇게 간체로 표기했습니다.

</body>
</html>



웹페이지 출력 결과:
장춘(長春)을 长春 이렇게 간체로 표기했습니다.



만약 lang="zh-CN" 이 없다면, 간체 한자가 나오지 않거나, 또는 나온다 하더라도 간체가 아닌 春 자는 한글 폰트 속의 春 자로 나오기에 글자 모양이 들쭉날쭉하게 됩니다.

또한 style="font-family:MingLiU;" 이렇게 중문 간체 폰트도 지정해야 하는데, MingLiU 라는 폰트는 사실 번체 폰트입니다. 그런데 이 폰트 속에 간체도 들어 있고, 진짜 간체보다 모양도 깔끔하기에 MingLiU 를 사용해 보았습니다. (▶▶ 중국어 간체자 번체자 폰트(글꼴) 이름 / 다운로드 하는 곳은? - Chinese Simplified Traditional Fonts 참조)




중국어 번체(Big5)에서는
lang="zh-TW"
이렇게 지정합니다.

☞ HTML/CSS/JavaScript

중문] 중국어판 간체 검색, 중국 구글 주소, 간체자표 - Google - Chinese (Simplified)

구글 간체 검색 주소


http://www.google.com/intl/zh-CN/
중문 간체자 검색용 구글의 주소는 위와 같습니다. 이곳은 중국 본토의 간체 사이트를 검색하는 곳입니다. 즉, 중국어판 구글입니다.


추가 사항: 이제는 www.google.cn 이 주소도 사용 가능합니다.

长春
이 링크는, 장춘(长春; 長春)이라는 지명을 검색한 결과입니다. 컴퓨터에 간체 폰트가 설치되어 있어야 제대로 보이는데, 윈도우XP에는 간체 폰트가 기본으로 설치되어 있습니다.



구글 번체 검색 주소


http://www.google.com/intl/zh-TW/
이것은, 중문 번체자 검색용 구글의 주소입니다. 대만과 홍콩의 번체자 사이트를 검색하는 곳입니다.




간체자표


여기에, 간체 한자와 번체 한자를 대조한 도표가 있습니다: ▶▶ [중국어] 간체 번체 한자 대조표/변환표 - Chinese Simplified : Traditional Convert Table





C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root

실수 출력 예제 + 루트 근사값 구하기


printf() 함수의 포맷 출력에는 공백의 너비도 지정이 가능합니다.

0.cpp
#include <stdio.h>
#include <math.h>

void main(void) {

  for (int i = 1; i <= 100; i++)
    printf("%3d = %18.15f\n", i, sqrt((double) i));

}



%3d
이것은 3자리 숫자의 정수를 출력하되, 1~2자리 정수의 앞은 공백으로 채워서 정렬하라는 뜻입니다.
따라서 100은 그대로 출력되지만, 1은 앞에 공백 2개가 있고, 10은 앞에 공백 1개가 있습니다.


%18.15f
18 이란 의미는, 실수의 최대 글자수가 18글자라는 것입니다. 17글자로 된 숫자는 앞에 공백이 붙어서 정렬됩니다.
15는 소수점 15자리까지 표현하라는 뜻입니다. 잘려나간 소수부는 반올림이 되어 반영됩니다.


실행 결과:
  1 =  1.000000000000000
  2 =  1.414213562373095
  3 =  1.732050807568877
  4 =  2.000000000000000
  5 =  2.236067977499790
  6 =  2.449489742783178
  7 =  2.645751311064591
  8 =  2.828427124746190
  9 =  3.000000000000000
 10 =  3.162277660168380
 11 =  3.316624790355400
 12 =  3.464101615137754
 13 =  3.605551275463989
 14 =  3.741657386773941
 15 =  3.872983346207417
 16 =  4.000000000000000
 17 =  4.123105625617661
 18 =  4.242640687119285
 19 =  4.358898943540674
 20 =  4.472135954999580
 21 =  4.582575694955840
 22 =  4.690415759823430
 23 =  4.795831523312719
 24 =  4.898979485566356
 25 =  5.000000000000000
 26 =  5.099019513592785
 27 =  5.196152422706632
 28 =  5.291502622129181
 29 =  5.385164807134504
 30 =  5.477225575051661
 31 =  5.567764362830022
 32 =  5.656854249492381
 33 =  5.744562646538029
 34 =  5.830951894845301
 35 =  5.916079783099616
 36 =  6.000000000000000
 37 =  6.082762530298219
 38 =  6.164414002968976
 39 =  6.244997998398398
 40 =  6.324555320336759
 41 =  6.403124237432849
 42 =  6.480740698407860
 43 =  6.557438524302000
 44 =  6.633249580710800
 45 =  6.708203932499369
 46 =  6.782329983125268
 47 =  6.855654600401044
 48 =  6.928203230275509
 49 =  7.000000000000000
 50 =  7.071067811865476
 51 =  7.141428428542850
 52 =  7.211102550927978
 53 =  7.280109889280518
 54 =  7.348469228349535
 55 =  7.416198487095663
 56 =  7.483314773547883
 57 =  7.549834435270750
 58 =  7.615773105863909
 59 =  7.681145747868608
 60 =  7.745966692414834
 61 =  7.810249675906654
 62 =  7.874007874011811
 63 =  7.937253933193772
 64 =  8.000000000000000
 65 =  8.062257748298549
 66 =  8.124038404635961
 67 =  8.185352771872450
 68 =  8.246211251235321
 69 =  8.306623862918075
 70 =  8.366600265340756
 71 =  8.426149773176359
 72 =  8.485281374238570
 73 =  8.544003745317530
 74 =  8.602325267042627
 75 =  8.660254037844387
 76 =  8.717797887081348
 77 =  8.774964387392123
 78 =  8.831760866327848
 79 =  8.888194417315589
 80 =  8.944271909999159
 81 =  9.000000000000000
 82 =  9.055385138137417
 83 =  9.110433579144299
 84 =  9.165151389911680
 85 =  9.219544457292887
 86 =  9.273618495495704
 87 =  9.327379053088816
 88 =  9.380831519646860
 89 =  9.433981132056603
 90 =  9.486832980505138
 91 =  9.539392014169456
 92 =  9.591663046625438
 93 =  9.643650760992955
 94 =  9.695359714832659
 95 =  9.746794344808963
 96 =  9.797958971132712
 97 =  9.848857801796104
 98 =  9.899494936611665
 99 =  9.949874371066199
100 = 10.000000000000000




루트 근사값 계산 함수 sqrt()


<math.h> 의 double sqrt(double x); 함수로 루트 근사값을 출력할 수 있습니다.


참고로, 위의 소스를 비주얼C++ 2003 으로 컴파일할 때, 그냥 sqrt(i) 이렇게 하면

0.cpp(7) : error C2668: 'sqrt' : ambiguous call to overloaded function
        D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(626): could be 'long double sqrt(long double)'
        D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(578): or 'float sqrt(float)'
        D:\Program Files\Microsoft Visual C++ Toolkit\include\math.h(200): or 'double sqrt(double)'
        while trying to match the argument list '(int)'
D:\Z>

이런 에러가 나게 됩니다. ambiguous call to overloaded function (오버로딩 함수를 모호하게 호출) 했다는 에러인데,

sqrt()함수는 double형 파라미터를 받아서 double형을 반환하지만, 정수를 넣어 주었기 때문에 그런 것입니다.

따라서 sqrt((double) i)) 이렇게 캐스팅하면 됩니다.



▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier

☞ C/C++

자바/Java] 실수 소수점 출력 자리 지정 + 원주율 상수 출력 예제 - PI

원주율을 소수점 몇째 자리까지 출력 예제


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {

    // 원주율을 소수점 15자리까지 출력
    System.out.format("%.15f%n", Math.PI);
    // 결과: 3.141592653589793


    // 원주율을 소수점 3자리까지 출력
    System.out.format("%.3f%n", Math.PI);
    // 결과 (반올림되었음): 3.142

  }
}


자바 1.5 (=5.0)의 format()메소드로 포맷 출력을 하면, 실수 출력을 쉽게 할 수 있습니다.

%.15f
이것은 소수점 15자리까지 나오게

%.3f
이것은 3자리까지 나오게 하는 것입니다.

포맷 출력은, 소수부를 자동으로 반올림합니다.


그리고 원주율은 Math.PI 여기에 들어 있습니다.



▶▶ 자바/Java] printf(), sprintf() 함수 포맷 출력 구현, System.out.println()으로

☞ 자바

자바/Java] 정규분포, 가우스(Gaussian) 랜덤(난수) 발생 - Gaussian Random Numbers 출력 예제

가우스 분포를 갖는 난수 발생 함수 사용 예제


파일명: Foo.java
import java.util.Random;

public class Foo {
  public static void main(String args[]) {

    Random oRandom = new Random();


    // 분포가 가운데에서 종 모양을 이루는 가우시안 랜덤 실수 1000개 출력
    // 평균 0.0 표준편차 1.0의 Gauss(가우스) 분포의 double형 난수 생성

    for (int i = 1; i <= 1000; i++)
      System.out.println(oRandom.nextGaussian());


    // 이것은 0.0 ~ 1.0 까지 균일한 분포로 랜덤한 실수 1000개 만들기 예제
    // for (int i = 1; i <= 1000; i++)
    //   System.out.println(oRandom.nextDouble());
    //

  }
}



자바의 난수 발생 메소드(함수)들은, 지정한 범위의 숫자들이 모두 균일하게 나옵니다. 그런데 중간값이 가장 많이 나오고 양쪽의 극단적인 값은 가장 적게 나오며, 그러한 값들이 부드러운 곡선을 이루는 난수를 발생시키려면, 위와 같이 Random 클래스의 nextGaussian() 메소드를 사용합니다. (일반 난수 발생법은 여기에: ▶▶ [자바/Java] 랜덤(난수) 정수/실수/불린 출력 예제 - Random, nextInt() 메소드)



위의 코드 박스의 예제를 실행한 결과:
-0.7700350191629152
-0.7775141414748729
0.0852805465588591
-1.102381138132199
0.6157885427074746
0.9977509006626814
1.486152666702072
0.8801040678458519
-1.4263983517336825
2.005608609950296
0.07890264912715708
-0.18441624291164838
-0.07353853279984125
1.1935119067519735
-0.45407037380611315
0.3882826613350095
0.4213023681417606
1.5632994606606816
-0.12173531278597248
-0.47210272835236505
-0.32965447118928937
-1.466829065613943
-0.46379370768041617
1.3554519117561945
-0.5293156681676003
0.7990740195377741
1.0215646581718913
-0.21498670825241603
-2.3839680302986443
-0.4510426727339296
0.0012643916031950834
1.3304117334257748
0.2138171248590456
-0.16357893241935245
-0.423917917985468
-0.5116896736879039
-0.10350225134270985
-0.5637113270019813
-0.5722515832380194

...이하 생략







Gaussian 함수 소스/알고리즘


 synchronized public double nextGaussian() {
    if (haveNextNextGaussian) {
            haveNextNextGaussian = false;
            return nextNextGaussian;
    } else {
            double v1, v2, s;
            do {
                    v1 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
                    v2 = 2 * nextDouble() - 1;   // between -1.0 and 1.0
                    s = v1 * v1 + v2 * v2;
            } while (s >= 1 || s == 0);
            double multiplier = Math.sqrt(-2 * Math.log(s)/s);
            nextNextGaussian = v2 * multiplier;
            haveNextNextGaussian = true;
            return v1 * multiplier;
    }
 }

위의 알고리즘은
여기 Java API 문서에 있는 것입니다.




java.util.Random 클래스를 사용하지 않고, 가우스 난수 발생을 자체 구현: ▶▶ 자바/Java] 가우시안(가우스;Gaussian) 난수 자체 구현; Gauss Random Number





엑셀 VBA매크로를 사용하여, "정규 분포 난수(가우스 분포 난수)"를 생성하는 방법: ▶▶ Excel/엑셀] 가우스 난수/정규분포 랜덤 생성 함수; Gaussian Random VBA 매크로


C언어로 된 가우스 함수는 여기에 있습니다: ▶▶ C언어] 정규분포, 가우스(Gaussian) 랜덤(난수) 발생 - Gaussian Random Numbers 출력 예제

정규분포 난수, 가우시안 랜덤 넘버 생성기: ▶▶ 정규분포 난수, 가우시안 랜덤 발생기; Normal Distribution Rand Generator

자바/Java] printf(), sprintf() 함수 포맷 출력 구현, System.out.println()으로

자바에서 printf()함수 형식으로 출력하기


파일명: Foo.java
public class Foo {
  public static void main(String args[]) {

    String s = "하하하";     // 문자열
    char c = '가';           // 유니코드 문자 1개
    int i = 255;             // 부호 있는 정수

    System.out.println(String.format("%s %d %c %f %X %x %02X%n", s, i, c, (float) i, i, i, 10));

    // 출력 결과: 하하하 255 가 255.000000 FF ff 0A


    System.out.format("%s %d %c %f %X %x %02X%n", s, i, c, (float) i, i, i, 10);

    // 더 줄이면 위와 같이


    System.out.printf("%s %d %c %f %X %x %02X%n", s, i, c, (float) i, i, i, 10);

    // 이렇게 printf 를 직접 쓸 수도... 이건 별로 자바스럽지가 않군요


  }
}



String.format() 메소드로, C언어의 sprintf() 함수를 구현할 수 있습니다. 자바 1.5 (=자바 5.0) 이상에서만 사용 가능합니다.

이것을 System.out.println()으로 출력하면, 최종적으로 printf() 함수와 같은 역할을 하게 됩니다.

%s %d %c %f %X %x %02X
이런 포맷 지정자는, C언어의 것과 거의 같습니다. (▶▶ C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier 참조)




▶▶ 자바/Java] 실수 소수점 출력 자리 지정 + 원주율 상수 출력 예제 - PI

▶▶ 자바/Java] 10진수, 16진수로 변환 출력 - 십진수 십육진수(헥사;Hex)

▶▶ 자바/Java] System.out.format() 줄바꿈, 운영체제(OS) 종류에 맞게; line separator

▶▶ Java/자바] 플러스 마이너스 부호 항상 출력, 음수 양수 기호 포맷; Plus Minus Sign

▶▶ Java/자바] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)

자바 강좌와 각종 예제

Friday, September 22, 2006

HTML/자바스크립트] 현재 페이지 주소 얻기/출력 - JavaScript Current Page URL

다음과 같은 자바스크립트로, 현재 페이지의 주소, 즉 브라우저 주소창의 주소(URL)를 얻을 수 있습니다.

<script type="text/javascript">

// 곧바로 현재 페이지 주소 출력
document.writeln(location.href);


// 변수에 넣어서 출력
var s = location.href;
document.writeln(s);

</script>

location.href 속에 현재 주소가 들어 있습니다.


예를 들어, 위의 자바스크립트 코드가 들어 있는 페이지의 주소가
http://www.google.com/test.html
이라면, 화면에는
http://www.google.com/test.html http://www.google.com/test.html

이렇게 출력됩니다.


☞ HTML/CSS/JavaScript

C언어/Perl] printf() 함수의 포맷 스트링 %s, %d - Format Specifier

C언어/펄에서, %s, %d 등의 퍼센트 기호 특수문자의 의미는?


printf() / sprintf() / fprintf() 함수 속의 퍼센트(%) 기호들은, "Format Specifier" 라고 하는데, 출력 형식을 지정하는 것입니다.

%s : 문자열
%c : 문자 1개
%d : +-부호 있는 정수
%u : +-부호 없는 정수
%f : 실수
%0.3f : 실수 (소수점 3자리까지 나오게)
%X : 16진수 대문자로
%x : 16진수 소문자로
%02X : 16진수 대문자로. 2자리 헥사에서, 앞의 빈 칸 있으면 0으로 채움

#include <stdio.h>

void main(void) {

  char s[] = "하하하";
  char c   = 'A';
  int i = 255;
  unsigned long iUL = 0xFFFFFFFFUL;
  float f = 1.234f;


  printf("%s\n", s);
  // 출력 결과: 하하하

  printf("%d\n", i);
  // 출력 결과: 255

  printf("%X\n", i);
  // 출력 결과: FF

  printf("%s %c %d %u %f %0.3f %X %x %02X\n", s, c, i, iUL, f, f, i, 255, 10);
  // 출력 결과: 하하하 A 255 4294967295 1.234000 1.234 FF ff 0A
}



예제에서, \n 은, 행갈이 문자입니다.

Format Specifier 를 이용하여, 데이터를 원하는 형식으로 출력할 수 있습니다.

약간 차이는 있지만, 펄에서도 printf 함수의 형식 지정자는 거의 같습니다.




▶▶ C언어] printf 함수에서, 퍼센트 기호(%) 출력 방법; Print Percent Sign

▶▶ C언어] printf함수, 실수 소수점 자리, 너비 지정 출력 + 루트 계산 - Square Root

▶▶ C언어] 플러스 마이너스 부호 항상 출력, 음수 양수 기호 포맷; printf() Plus Minus Sign

▶▶ C언어] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)

▶▶ C언어] printf() 함수 출력을, 문자열로 저장하는 법; printf to String

▶▶ C언어, unsigned long 의 printf 함수 포맷


참고: ▶▶ 자바/Java] printf(), sprintf() 함수 포맷 출력 구현, System.out.println()으로



펄 강좌와 각종 예제

워드 매크로 내보내기/가져오기, 외부 텍스트 파일로 저장 - MS Word Macro Export Import

매크로 관련 작업을 하기에 앞서, 우선 기본 서식 파일인 Normal.dot 이 자동으로 변경되지 않게 해주는 것이 좋습니다.

워드 메뉴: 도구 > 옵션 > 저장 > 기본 서식 파일을 저장할 때 확인
에 체크하면, 워드를 종료할 때, Normal.dot 에 변경 사항을 저장해도 좋은지 물어봅니다. (▶▶ Normal.dot 이란 파일은 무엇이며, 어디에 있나요 [MS오피스 / MS워드 QnA] 참고)


워드에서는 매크로가 저장될 수 있는 장소가 2군데입니다. 하나는 기본 서식 파일인 Normal.dot 파일이고, 하나는 현재 편집중인 문서입니다. 현재 문서에 저장하면 현재 문서에서만 사용할 수 있고, Normal.dot 에 저장하면 모든 워드 문서에서 사용 가능하기에 보통은 Normal.dot 에 저장합니다.

여기서는 Normal.dot 에 저장하는 것을 기준으로 설명합니다.



워드 매크로 내보내기


워드 문서 속의 매크로를, 평범한 아스키 파일로 빼내는 작업입니다.

* 매크로가 들어 있는 워드 문서를 엽니다.

* Alt+F11키를 누릅니다. 비주얼 베이직 에디터가 나옵니다. 에디터 좌측 창에서, Normal 밑의 모듈 밑에, NewMacros 등의 이름을 더블클릭하면, 매크로 소스 코드가 나옵니다.

* NewMacros 등의 이름을 마우스 우측 버튼으로 클릭하여, 파일 내보내기 를 선택.

파일 저장 대화상자가 나오고, 매크로가 NewMacros.bas 이런 식의 이름으로 저장됩니다. bas 즉 베이직이라는 확장자를 가집니다. 이것으로 내보내기에 완료되었습니다.



워드 매크로 가져오기


평범한 아스키 파일로 저장되어 있는 매크로를, 워드 문서에 병합시키는 작업입니다.

* 워드 문서를 열고, Alt+F11키를 누릅니다. 비주얼 베이직 에디터가 나옵니다.

* 비주얼 베이직 에디터 좌측창에서, Normal 이라는 곳을 클릭.

* 비주얼 베이직 에디터의 상단 메뉴에서, 파일 > 파일 가져오기 를 선택.

* NewMacros.bas 등의 이름을 가진 파일을 엽니다. 그러면 에디터 좌측창에 "NewMacros" 라는 모듈이 생길 것입니다.

* 이제 워드 문서에서, Alt+F8키를 누르면, "NewMacros"라는 모듈 속에 든 Macro1, Macro2 등의 매크로를 사용할 수 있습니다.

* 워드를 종료하면
기본 서식 파일 Normal.dot이(가) 변경되었습니다. 변경 사항을 저장하시겠습니까?
라는 메시지가 나올 것입니다. 이때 "예"를 선택하면, 매크로가 기본 서식 파일에 저장됩니다.



▶▶ 엑셀 매크로 내보내기/가져오기, 외부 텍스트 파일로 저장 - Excel Macro Export

▶▶ [MS오피스/MS워드/VBA] 200자 원고지 매수(분량) 계산 매크로

☞ 오피스/엑셀/워드

엑셀 매크로 내보내기/가져오기, 외부 텍스트 파일로 저장 - Excel Macro Export

엑셀 매크로 내보내기


엑셀 문서 속의 매크로를, 평범한 아스키 파일로 빼내는 작업입니다.

* 매크로가 들어 있는 엑셀 문서를 엽니다.

* Alt+F11키를 누릅니다. 비주얼 베이직 에디터가 나옵니다. 에디터 좌측 창에서, 모듈이라고 된 곳의 [+]를 클릭하여 펼칩니다. Module1 등의 이름을 가진 곳을 더블클릭하면, 예를 들어 다음과 같은 매크로가 나옵니다.

Sub Macro1()
'
' Macro1 Macro
' Foo이(가) 2006-09-22에 기록한 매크로
'

'
    ActiveCell.FormulaR1C1 = "abcdefg"
    Range("B1").Select
End Sub


* 다시 좌측창에서, Module1 이라는 곳을 마우스 우측 버튼으로 클릭하여, 파일 내보내기 를 선택.

파일 저장 대화상자가 나오고, 매크로가 Module1.bas 이런 식의 이름으로 저장됩니다. bas 즉 베이직이라는 확장자를 가집니다.


결국 다음과 같이 하드에 저장됩니다:
Module1.bas
Attribute VB_Name = "Module1"
Sub Macro1()
Attribute Macro1.VB_Description = "Foo이(가) 2006-09-22에 기록한 매크로"
Attribute Macro1.VB_ProcData.VB_Invoke_Func = " \n14"
'
' Macro1 Macro
' Foo이(가) 2006-09-22에 기록한 매크로
'

'
    ActiveCell.FormulaR1C1 = "abcdefg"
    Range("B1").Select
End Sub




엑셀 매크로 가져오기


평범한 아스키 파일로 저장되어 있는 매크로를, 엑셀 문서에 병합시키는 작업입니다.

* 엑셀 문서를 열고, Alt+F11키를 누릅니다. 비주얼 베이직 에디터가 나옵니다.

* 비주얼 베이직 에디터의 상단 메뉴에서, 파일 > 파일 가져오기 를 선택.

* Module1.bas 등의 이름을 가진 파일을 엽니다. 그러면 에디터 좌측창에 "Module1" 이라는 모듈이 생길 것입니다.

* 이제 엑셀 문서에서, Alt+F8키를 누르면 Module1 이라는 매크로를 사용할 수 있습니다.



▶▶ 워드 매크로 내보내기/가져오기, 외부 텍스트 파일로 저장 - MS Word Macro Export Import

☞ 오피스/엑셀

구글] 검색 제외 하기, 검색 결과에서 특정 단어 제외시키기 - Google Exclude Word

구글에서 검색을 할 때, 너무 광범위한 결과가 나오거나, 상관없는 검색어가 같이 나온다면, 특정 검색어를 제외시키면 결과가 정확해집니다.

검색어를 제외하는 방법은, 제외시킬 검색어 바로 앞에 마이너스(-) 기호를 붙이는 것입니다. 예를 들어,
자바 -자바스크립트

이것은 "자바"를 검색하되 "자바스크립트"는 제외시키라는 뜻입니다.

(자바와 자바스크립트는 전혀 다른 언어인데도, 서로 혼동하여 쓰이는 경우가 너무 많기에 이렇게 해주면 진짜 자바에 대해서만 나오게 되어 편리합니다.)

단, 마이너스 기호 앞에 공백이 있어야 합니다.
O: 자바 -자바스크립트

X: 자바-자바스크립트



그리고 제외시킬 검색어가 여러 개라면

검색어 -제외시킬검색어 -제외시킬검색어 -제외시킬검색어

이렇게 나열하면 됩니다.



Q: 구글 검색엔진에서, 특수문자 검색법은?


구글에서는 특수문자 검색이 잘 안되더군요 -_-
구글 초창기부터 안되었는데 지금도 안되고 있습니다.

프로그래밍에서의 특수문자들이 검색이 되지 않아서 저도 곤란을 겪고 있습니다.

가령 펄에서 자주 쓰이는
$_[0]
이런 것을 검색하면 그냥 0 이 검색되어 버립니다. 물론 $_[0] 도 가끔 나오긴 하는데 잘 되지 않았습니다.


▶▶ 구글, 지정한 사이트만 검색, 특정 디렉토리(폴더)만 검색, Site Search Google

☞ Web

Desktop.ini 파일은 무엇이며, 지워도 되나요? - 폴더 설정 파일

윈도우에 Desktop.ini 라는 파일이 많이 있는데, 이것은 "폴더 설정 파일"입니다. "폴더 아이콘"과 "폴더 배경 화면" 등의 이런 저런 설정 사항들을 기록해 놓은 텍스트 파일입니다. 메모장으로 내용을 볼 수 있지만, 숨겨진 파일이기에 히든파일을 나오게 해야 보입니다. (▶▶ 숨김 속성의 파일/폴더 보이게 하기; 윈도우의 히든 파일 (Hidden File) 나타내는 법은? 참고)


윈도우 탐색기: 폴더 아이콘과 폴더 배경 화면

윈도우 탐색기: 각 폴더마다 각각의 아이콘과 배경 화면 지정 가능
윈도우2000의 탐색기인데, 윈도우XP에는 폴더 배경 화면 옵션이 보이지 않더군요 -_-?

예를 들어, 저의 경우, D:\WINDOWS_ 라는 폴더 속에 Desktop.ini 파일이 있습니다. 이 파일을 메모장으로 불러보면 다음과 같은 내용이 나옵니다:
[ExtShellFolderViews]
{BE098140-A513-11D0-A3A4-00C04FD706EC}={BE098140-A513-11D0-A3A4-00C04FD706EC}
[{BE098140-A513-11D0-A3A4-00C04FD706EC}]
Attributes=1
IconArea_Image=D:\WINDOWS_\Wallpapers\Cool Saw-toothed Left Side (Pink).gif
[.ShellClassInfo]
IconFile=D:\WINDOWS_\Icons.dll
IconIndex=218
ConfirmFileOp=0



IconArea_Image=...
이것은 폴더의 배경 화면으로 쓸 이미지 파일의 경로를 지정한 것이고

IconFile=...
이것은 윈도 탐색기 (Windows Explorer) 등에서 표시할 D:\WINDOWS_ 라는 폴더의 전용 아이콘을 지정하는 것입니다.

현재 Icons.dll 파일 안에는 아이콘이 수백개 들어 있기에, IconIndex 로 218번째 아이콘을 지정했습니다.


Q: Desktop.ini 파일을 지워도 되나요?


대부분의 경우, 지워도 상관 없습니다. 그렇지만 해당 폴더의 아이콘과 배경 화면 등이 나오게 않게 됩니다.


Q: Desktop.ini 파일을 만들려면?


윈도우 탐색기 메뉴: 보기 > 현재 폴더 사용자 정의

로 만드시면 됩니다.


▶▶ INI (.ini); INF (.inf) 파일; CFG (.cfg) 확장자 파일의 용도

☞ 윈도우(WINDOWS)

윈도우XP 탐색기, 시작 폴더 변경 / 디렉토리 기본값 바꾸기 - Windows Explorer 팁

윈도우XP에서 윈도 탐색기 (Windows Explorer)를 실행하면, 처음 시작 위치가 항상 "내 문서"이기에 불편합니다. 하드디스크의 파일들을 보기 위해서는,
"내 컴퓨터  > 로컬 디스크 (C:)" 순으로 일일이 클릭해 주어야 합니다.


시작 위치를, 하드디스크(로컬디스크)의 루트로 바꾸면 편리합니다.


탐색기 시작 위치 변경 방법 (단계1): 바로가기 아이콘 만들기


윈도우 "시작" 버튼을 클릭한 후
모든 프로그램 > 보조 프로그램 > Windows 탐색기
라는 항목을 마우스 오른쪽 버튼으로 끌어다가 "바탕화면"에 놓으면 "여기에 복사"라는 메뉴가 나오는데, "여기에 복사"를 선택하여, 탐색기 아이콘을 바탕화면에 복사합니다.


시작 위치 변경 방법 (단계2): 바로가기 아이콘 수정


방금 바탕화면에 복사한, 탐색기 아이콘을 클릭하여 선택한 후, 키보드의 Alt+Enter키를 누릅니다. (Alt키를 누르면서 Enter키를 누름)

Windows 탐색기 등록 정보 라는 창이 나옵니다. 그 창에서 대상이라는 곳에
%SystemRoot%\explorer.exe /e,c:\
이렇게 적어줍니다. 그런 후 "확인" 버튼을 누릅니다.

이제 바탕화면의 "Windows 탐색기" 아이콘을 더블클릭하면, C: 드라이브가 시작 위치가 됩니다. C:드라이브의 모든 폴더와 파일들이 기본적으로 나오기에 아주 편리합니다.

만약 D: 드라이브가 기본적으로 나오게 하려면
%SystemRoot%\explorer.exe /e,d:\
이렇게 합니다.


☞ WINDOWS

Thursday, September 21, 2006

컴퓨터] A: B: 또는 C: D: E: 드라이브(Drive) 장치란?

윈도우는, A: 부터 Z: 드라이브까지 존재할 수 있습니다.

A: 드라이브는 첫번째 "플로피 디스켓 드라이브"입니다.
B: 드라이브는 두번째 "플로피 디스켓 드라이브"인데, 요즘 컴퓨터에는 B:는 물론이고 A:드라이브도 없을 것입니다.

C: 드라이브는 첫번째 하드디스크입니다. 또는 첫번째 하드디스크의 첫번째 파티션입니다. (파티션이란, 1개의 하드디스크를 여러 개의 하드디스크로 가상적으로 나누어서 사용하는 것입니다.) C:에 윈도우가 설치됩니다.


D: 드라이버는 두번째 하드디스크이거나, 또는 첫번째 하드디스크의 두번째 파티션입니다. 그러나 만약, 하드디스크가 1개뿐이고, 파티션도 1개뿐이라면, D:는 보통 CD-ROM 이나 DVD 드라이브가 됩니다. 즉, D: 드라이브부터는 각 컴퓨터의 사정에 따라서 달라지게 됩니다.


윈도 탐색기 (Windows Explorer)를 실행한 후, "내 컴퓨터" 라는 곳을 클릭하면 현재 컴퓨터에 어떤 드라이브들이 달려 있는지 목록이 나옵니다.

가령 하드디스크가 하나뿐이라면 로컬 디스크 (C:) 라는 것 하나만 나올 것입니다. (CD-ROM 드라이브가 또한 있다면 D:가 CD-ROM 드라이브가 됩니다.)

두번째 하드가 있거나, 첫번째 하드를 2개의 파티션으로 나누어서 사용중이라면 로컬 디스크 (D:)도 있을 것입니다. 그것이 D:드라이브입니다.



▶▶ 컴퓨터 하드, 하드디스크, 하드 드라이브, 하드웨어란? - HDD Hard-Drive Hardware

☞ WINDOWS


<< Home

Categories
Some Recent Posts
Monthly Archives
Top