친구 프로그램 만들어주기 (with C)

Keinn51·2023년 2월 25일
0
post-thumbnail

프로그래밍을 할 줄 모르는 친구가 힘들어 하는 일이 있었습니다.
회사에 매 주 복사 붙여넣기를 해야 하는 반복 작업이 있었던 것입니다.

스스로 코딩을 배워서 하려고 하길래, 엄청난 고난😇이 보였습니다. 너무 시간이 오래 걸릴 것 같아서 도와주었습니다. 이 글에서 그 것을 해결한 과정과 느낀 것을 적어보려고 합니다. 비전공자이지만 나름 C언어와 linux 명령어를 공부한 적이 있습니다🔥

이 글에서는 프로그램을 만듭니다.
C File에서 문자를 추출해, 새로운 C File을 생성해줄 것입니다.

결과와 과정을 아래의 깃허브에 정리해두었습니다.
https://github.com/keinn51/extract_string

⭐️ 메인 로직을 직접 실행해보실 수도 있습니다! ⭐️
코드 정리가 안 되어 있는 점 참고 부탁드립니다ㅎㅎ
https://onlinegdb.com/qqqBSACYF

❓ 무엇을 어떻게

이런 작동을 하는 프로그램을 원한다고 말해왔습니다.

회사의 데이터(.txt) ➡️ 자신이 원하는 데이터를 뽑아낸 새로운 텍스트(.txt) 생성

대충 아래처럼 생긴 데이터를 회사에서 받는다고 합니다.
내용은 보안상의 이유로 모두 dummy로 대체합니다. 틀만 참고합니다.

들어오는 데이터

# DAY 1
***********************************************
2303.1d shift started by : ABCD/EFGH/WWWW/ACXX    16/JAN/2023 09:00*
****************************************

1004 install and connect DOUGHTNUT
IDONEI CONNECT DOUGHTNUT
 +4eye check : ABCD/LLLL

++++++++++++++++++++++
2303.1d shift ended by : ABCD/EFGH/WWWW/ACXX       16/JAN/2023 09:00*
++++++++++++++++++++++

# DAY 2
***********************************************
2303.1d shift started by : ABCD/CCCC/WWWW/WIOQ     17/JAN/2023 09:00*
****************************************

1004 install and connect SANCHO
IDONEI CONNECT SANCHO
 +4eye check : ABCD/CCCC

1004 install and connect WHALE
IDONEI CONNECT WHALE
 +4eye check : WIOQ/WWWW

++++++++++++++++++++++
2303.1d shift ended by : ABCD/CCCC/WWWW/WIOQ      17/JAN/2023 09:00*
++++++++++++++++++++++
....

Day 1과 Day2는 임시로 넣어둔 것입니다. 데이터가 날짜 단위로 묶여 있습니다. 위 텍스트에서 다음 세 문장을 뽑아내어야 합니다.

  1. shift started by가 들어가는 문장을 찾습니다.
    이 문장의 날짜 데이터를 가져옵니다.
  2. 1번의 문장에 이후에 나오는, 4eye check 가 들어간 문장을 가져옵니다.
  3. 2번의 문장의 문단에서 숫자로 시작하는 문장을 가져옵니다.

이렇게 1~3번 문장을 가지고 와서, 새로운 텍스트(.txt) 로 만들어내야 합니다.

원하는 데이터

# 데이터 묶음 1
2303.1d shift started by : ABCD/EIDK/WWWW/WIOQ   16/JAN/2023 09:00*
1004 install and connect DOUGHTNUT
+4eye check : ABCD/EIDK

# 데이터 묶음 2
2303.1d shift started by : ABCD/EIDK/WWWW/WIOQ   16/JAN/2023 09:00*
1004 install and connect DOUGHTNUT
+4eye check : ABCD/EIDK
1004 install and connect WHALE
+4eye check : WIOQ/WWWW

날짜 별 데이터 묶음으로 나올 것입니다.

🏋🏻 해결 방법

생각해본 해결 순서

제가 생각한 할 일의 순서와 해결법은 다음과 같습니다.

  1. txt 파일을 읽어야 합니다.
  2. 읽은 파일에서 원하는 text를 추출하는 함수를 짜야 합니다.
  3. 결과를 새로운 txt파일에 써야 합니다.
  4. 1~3 번을 자동으로 해주도록 프로그램화 해야 합니다.

미천한 C언어 경험에 미루어보면, linux 명령어와 c언어를 사용하면 된다는 생각이 들었습니다.

구현 방법

구현 순서는 사진과 같습니다. 프로그램은 C언어로 작성됩니다. 추가 설명을 해보겠읍니다.

  • Open ➡️ Text.txt의 내용을 open 함수 를 사용해 C프로젝트로 가져옵니다.
  • Machine Code ➡️ C언어로 작성된 코드는 사람이 보기 좋은 코드입니다. 기계가 이해할 저수준 언어(Low-level language)로 바꾸는 작업이 필요합니다.
  • Object file(~~.o) ➡️ Machine Code(Low-level language)들이 포함된 File을 지칭합니다.
  • Linking ➡️ Object File들을 하나로 묶어 Program File로 만들어줍니다.


출처 : https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html

"추가 설명만으로는 부족하다, 더 알고 싶다!" 하시는 분들은 사진을 참고해보십시오.
C언어로 작성된 파일이 Machine Code가 되는 과정을 상세하게 적어준 그림입니다.

사진을 더 상세하게 설명할 수 있지만, 이미 잘 정리되어 있는 글을 발견해서 공유드려요🙂
https://cs-fundamentals.com/c-programming/how-to-compile-c-program-using-gcc

🧐 Mac에서 Window 프로그램 제작 시 유의사항

정적 라이브러리 문제

linux에서는 .a 라는 확장자를 정적 라이브러리로 사용합니다. windows에서는 .lib을 사용한다고 합니다.

LIB(lib.exe)는 표준 라이브러리를 만들고, 라이브러리를 가져오고, 프로그램을 빌드할 때 LINK 와 함께 사용할 수 있는 파일을 내보냅니다. LIB는 명령 프롬프트에서 실행됩니다. (🗣 microsoft)

이로 인해서, .a 파일을 이용하기 힘들었고 결국 구현에 필요한 소스 코드(.c) 들을 레포지토리에 넣어두어야 했습니다. 참고 자료

프로그램 실행 경로 가져오는 방법

mac에서는 sys/param.h 를 사용해서 프로그램 실행 경로를 가져왔습니다.

이는 window 환경에서 전처리가 안 되었습니다. 이 header file은 linux용 인 듯합니다. 이 것은 확실하지는 않습니다. 누군가가 stackoverflow에서 그렇다고 했지요.

아마 mac과 window에서 path 환경 변수를 참조하는 방법이 달라서 그런 것 같다는 저의 판단입니다.

🙏🏻 느낀점

열심히 만들어서 작동도 되게 했..지만 친구의 회사 보안상 프로그램을 반입할 수 없다고 합니다. 내가 친구의 회사 상황과 요구 사항을 더욱 자세하게 들었어야 한다는 생각이 드네요.🧐 다음부터 누군가가 회사에서 사용할 프로그램을 만들어줄 수 있냐고 하면, 정중히 거절하는게 좋아보입니다 껄껄

그래도 누군가에게 프로그래밍으로 도움을 줄 수 있다는 것을 느꼈습니다.
또 누군가를 도와줄 수 있으면 열심히 도와주고 싶습니다 👋🏻

profile
책임질 수 있는 글을 쓰렴

0개의 댓글