Posted on 2011/09/27 22:06 / Filed Under Coding/C#
글 주소 : http://blog.sam-chon.com/blog/7

잉여로울때 가장 창의적인 누군가는
심심하면 코딩을 합니다.

할게 없어서 문제지만.

여튼 심심하니까 택배 배송 자동 조회 프로그램이나 하나 짜볼까하고..
[물론 언제까지라는 기한도 없고, 어떻게라는 방법도 없고, 답은 더더욱 없고
심지어 귀찮으면 쫑나는.]

뭐 그런거.

심심하니까 이러고 놀아요 ^^

[한일]
- 대충 Form 나옴.
-- 오 Dock이랑 TableLayoutPanel 쓰니까 무지 편하고만! 새로운 발견.

사용자 삽입 이미지

- IO데이터 선정
-- [입력값]
--- 사용자 : 물품명, 업체, 송장번호, 메모
-- [출력값]
--- PROG : 현재 배송상황, 배송정보 페이지 바로가기
- 기능
-- 지정한 시간마다 자동으로 배송상황 조회
--- [WebPage를 읽어와 정규식으로 처리해볼까 하는데. 귀찮으면 그냥 Find 때릴듯.]
-- 해당 item의 배송정보를 수동으로 확인하기 위해 해당업체 웹페이지로 바로가기.
--- 물론 송장번호가 적용된 상태로. [ex) 네이버 배송조회]
-- 자동으로 조회된 배송상황에 변동이 있을 경우 사용자에게 알림.
--- 소리건 팝업이건... 문자전송 솔루션이 있을 턱이 없으니, 문자로 알림은 제외
- 사용자 입력Form 나옴.
-- 하지만 역시 깡통임. [NoCode]
- 각 택배사의 배송정보 조회 Page와 Method 획득.
-- 네이버가 협찬.
--- 네이버 사랑합니다.

[할일]
- 뭘 다 쓰나. 많지.


2011/09/27 22:06 2011/09/27 22:06

Posted on 2011/09/26 20:04 / Filed Under Coding/C#
글 주소 : http://blog.sam-chon.com/blog/6

PRISM1) 프로그램을 작성하면서 1라인 1데이터가 아닌 1라인 N데이터를 읽어야 하는 경우가 생겼다.

CASE 1
  -.004018  -.004017  -.004029  -.004020  -.004020  -.003994  -.003970  -.003916
  -.003870  -.003802  -.003751  -.003690  -.003655  -.003622  -.003610  -.003590
  -.003566  -.003502  -.003466  -.003404  -.003328  -.003189  -.002960  -.002640
  -.002309  -.001918  -.001669  -.001557  -.001560  -.001566  -.001613  -.001782


위와 같은 경우인데 이 파일은 작성시에 %8f10.6 형식으로 출력된듯 보였다.
위의 경우에선 별 문제가 없지만 파일을 읽다보니.

CASE 2
 -9.253443 -9.762612-10.204670-10.591550-10.932500-11.231600-11.495950-11.727500
-11.910750-12.054820-12.180330-12.287930-12.367450-12.436120-12.501740-12.531370
-12.538000-12.528090-12.501160-12.457860-12.382530-12.262680-12.075410-11.795140
-11.435660-10.992180-10.506850-10.036080 -9.630808 -9.319317 -9.120338 -8.921580
 -8.826056 -8.779691 -8.634315 -8.461272 -8.219485 -7.850664 -7.415677 -6.993391


위와 같은[각 데이터간 공백이 하나도 없는] 구간이 있었다. 출력 Format의 자릿수를 넘어가서 발생한 경우인 것 같은데..

일반적으로

StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] tmp_line = null;
double[] data_array = new double[NumOfDataPerLine];
char[] set_delimiter = {' ','/','\t'};
tmp_line = line.Split(set_delimiter);
for(int i =0;i < tmp_line.Length;++i)
{
data_array[i] = double.Parse(tmp_line[i]);
}
sr.close();


위와 같은 코드로 작성되었을때 CASE 1의 데이터는 잘 처리하지만
CASE 2의 데이터는 처리가 되지 않는다. [당연히.]

그래서 코드를 다음과 같이 수정하니 정상적으로 작동 되었다.
큰 수정은 아니고 아주 작은 트릭이랄까..

사실상 음수가 아닌 경우엔 처리가 되지 않을듯 싶다.

StreamReader sr = new StreamReader(filepath);
string line = sr.ReadLine();
string[] tmp_line = null;
double[] data_array = new double[NumOfDataPerLine];
line = line.Replace("-"," -"); //추가
char[] set_delimiter = {' ','/','\t'};
tmp_line = line.Split(set_delimiter);
for(int i =0;i < tmp_line.Length;++i)
{
data_array[i] = double.Parse(tmp_line[i]);
}
sr.close();


음수 부호(-)를 만나면 강제로 음수 부호 앞에 공백을 하나 넣는 것이다.

어차피 기존 코드 처리방식이 delimiter를 정하고 해당 delimiter로 데이터를 구분하니
그에 맞추어 간단하게 수정을 해보았다.

문제가 발생하던 파일에선 정상적으로 잘 출력이 되었으나, 자릿수를 더 넘어서 양수임에도 불구하고(음수 부호가 없다) 공백이 없다면... 내 지식으론 처리하기 어렵지 싶은데...

여튼 이런 트릭으로 이 문제를 해결!
Footnote.
  1. 1)http://sem.inha.ac.kr/program/prism/index.htm [Back]

2011/09/26 20:04 2011/09/26 20:04
TAG : , ,

About

by 삼촌

Notice

Creative Commons License

이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.