프로그래밍을 할 줄 모르는 친구가 힘들어 하는 일이 있었습니다.
회사에 매 주 복사 붙여넣기를 해야 하는 반복 작업이 있었던 것입니다.
스스로 코딩을 배워서 하려고 하길래, 엄청난 고난😇이 보였습니다. 너무 시간이 오래 걸릴 것 같아서 도와주었습니다. 이 글에서 그 것을 해결한 과정과 느낀 것을 적어보려고 합니다. 비전공자이지만 나름 C언어와 linux 명령어를 공부한 적이 있습니다🔥
이 글에서는 프로그램을 만듭니다.
C File에서 문자를 추출해, 새로운 C File을 생성해줄 것입니다.
결과와 과정을 아래에 정리해두었습니다.
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는 임시로 넣어둔 것입니다. 데이터가 날짜 단위로 묶여 있습니다. 위 텍스트에서 다음 세 문장을 뽑아내어야 합니다.
shift started by
가 들어가는 문장을 찾습니다.
이 문장의 날짜 데이터를 가져옵니다.- 1번의 문장에 이후에 나오는,
4eye check
가 들어간 문장을 가져옵니다. - 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
날짜 별 데이터 묶음으로 나올 것입니다.
🏋🏻 해결 방법
생각해본 해결 순서
제가 생각한 할 일의 순서와 해결법은 다음과 같습니다.
- txt 파일을 읽어야 합니다.
- 읽은 파일에서 원하는 text를 추출하는 함수를 짜야 합니다.
- 결과를 새로운 txt파일에 써야 합니다.
- 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 환경 변수를 참조하는 방법이 달라서 그런 것 같다는 저의 판단입니다.
🙏🏻 느낀점
열심히 만들어서 작동도 되게 했..지만 친구의 회사 보안상 프로그램을 반입할 수 없다고 합니다. 내가 친구의 회사 상황과 요구 사항을 더욱 자세하게 들었어야 한다는 생각
이 드네요.🧐 다음부터 누군가가 회사에서 사용할 프로그램을 만들어줄 수 있냐고 하면, 정중히 거절하는게 좋아보입니다
그래도 누군가에게 프로그래밍으로 도움을 줄 수 있다는 것을 느꼈습니다.
또 누군가를 도와줄 수 있으면 열심히 도와주고 싶습니다 👋🏻
'Develop' 카테고리의 다른 글
lazy loading으로 Entry Point File 크기 줄이는 방법 연구 (0) | 2024.07.20 |
---|---|
React context 대신 Event bus를 사용해 렌더링 개선하는 방법 조사 (0) | 2024.07.20 |
drag event 성능 개선을 위한 JS web worker 사전 조사 (0) | 2024.07.20 |
React : performamce, profiler를 통한 성능 개선 측정하기 (drag & drop, state refactoring) (0) | 2024.07.20 |
쿠키로 마음을 전하고 싶으면 도메인부터 맞추자 🍪 (0) | 2024.07.20 |