소프트웨어 TRIM C코드 도움이 필요합니다
2021.08.26 16:45
답변해주시는 분에게 미리 감사인사 드립니다
파일 뒤에 .C로 끝나서 C코드가 아닐까 싶은데 아니면 아닌대로 넘어가주세요
여기 이 trim.c 파일을 메모장으로 열었더니
이렇게 나오는데 여기서 말하는 유니코드에 8, 16BE, LE 모두 포함인가요?
혹시 일부 유니코드만 지원하는거면 모든 유니코드로 적용하게 바꾸는 방법 좀 부탁드립니다
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int RemoveSpace(char *filename);
int main(int argc, char* argv[]) {
if(argc == 1) {
DIR* dirp = opendir(".");
while (dirp) {
struct dirent* dp = NULL;
if ((dp = readdir(dirp)) != NULL) {
if(NULL != strstr(dp->d_name,".txt")) RemoveSpace(dp->d_name);
}
else
{
closedir(dirp);
break;
}
}
puts("Modification Complete.");
return 0;
}
else if(argc == 2) {
RemoveSpace(argv[1]);
puts("Modification Complete.");
return 0;
}
else if(argc > 2)
{
puts("Either run it without a filename to modify all the text files in the folder, or enter one filename of the text to be modified. eg) trim.exe test.txt");
return 1;
}
}
int RemoveSpace(char *filename) {
FILE *fp; // 파일
char *buffer; // 파일의 내용을 담을 버퍼의 포인터
char *tar_buffer; // 파일의 내용을 담을 버퍼의 포인터
long fsize; // 파일 크기를 저장할 변수
long tar_index;
if((fp = fopen(filename, "rb")) == NULL) { // 입력 파일 열기(텍스트 모드)
puts("File not found!\n");
return 1;
}
// 파일의 크기를 구함
fseek(fp, 0, SEEK_END); // 파일포인터를 파일의 끝으로 이동
fsize = ftell(fp); // 현재 파일포인터를 읽으면 파일크기가 됨
fseek(fp, 0, SEEK_SET); // 파일포인터를 다시 파일의 맨 처음으로 이동
// 버퍼를 준비함
buffer = (char*)malloc(fsize + 10); // 파일의 내용을 담을 버퍼를 할당
tar_buffer = (char*)malloc(fsize + 10);
// 파일을 읽음
fsize = fread(buffer, 1, fsize, fp); // 파일을 한번에 읽음
// \r\n의 변화가 있을 것이므로 fsize값을 갱신함
fclose(fp); // 파일 닫음
buffer[fsize] = '\0'; // 문자열로 간주할 수 있게 마지막에 '\0'을 넣음
tar_buffer[fsize] = '\0';
tar_index = 0;
for(int i=0;i<=fsize;i++) {
//개행문자(0D0A) 사이에 있는 빈 칸 문자는 다 지운다.
if(i+1 <= fsize && buffer[i] == 0x0D && buffer[i+1] == 0x0A) {
do{
tar_buffer[tar_index++] = buffer[i++];
tar_buffer[tar_index++] = buffer[i++];
}while(i+1 <= fsize && buffer[i] == 0x0D && buffer[i+1] == 0x0A);
while(1){
//이놈이 0xE3이 아니라 0xffffffE3라서 삽질함
//유니코드 빈 칸 문자 지우기
if(i+2 <= fsize && buffer[i] == 0xffffffE3 && buffer[i+1] == 0xffffff80 && buffer[i+2] == 0xffffff80) {
i=i+3;
}
//아스키코드 빈 칸 문자 지우기
else if(buffer[i] == 0x20) {
i=i+1;
}
// 딴 문자 나오면 안 지우고 나가봅니다.
else break;
}
}
tar_buffer[tar_index++] = buffer[i];
}
// 출력 파일 생성 및 저장
if((fp = fopen(filename, "wb")) == NULL) { // 출력 파일 생성(텍스트 모드)
puts("File cannot create!\n");
free(buffer); // 할당한 버퍼를 해제
free(tar_buffer);
return 1;
}
fwrite(tar_buffer, 1, tar_index, fp); // 내용을 한번에 파일로 출력
fclose(fp); // 파일 닫음
free(buffer);
free(tar_buffer);
return 0;
}
추신. 이 파일은 2016년도에 어떤 경로로 배포됐던 공백 없애는 유틸리티라고 받았습니다
댓글 [0]
번호 | 제목 | 글쓴이 | 조회 | 등록일 |
---|---|---|---|---|
[공지] | 질문과 답변 게시판 이용간 유의사항 | gooddew | - | - |
90550 | 윈 도 우| 비눗방울 화면보호기 검은화면이 생김. [2] | 영감-2 | 747 | 08-27 |
90549 | 소프트웨어| 장치관리자 드라이버 질문입니다 [6] | 하얀달 | 292 | 08-27 |
90548 | 소프트웨어| 실행 파일들이 이상해 졌습니다 [9] | 양뀌비 | 425 | 08-27 |
90547 | 기 타| 오피스 LTSC는 어디서 다운 받을수 있나요? [1] | #cortana# | 608 | 08-27 |
90546 | 윈 도 우| 윈도우 로그오프 (logoff) 하면 메모리 새로 비워지나요? [2] | 좀머씨 | 283 | 08-27 |
90545 | 소프트웨어| 멀티 부팅...WIN11/WIN10 같이 사용...!! [1] | 슈퍼소니코 | 404 | 08-27 |
90544 | 윈 도 우| 윈도우10 LTSB 2016과 LTSC 2019는 지원기간이 정확히? [2] | SUbSigNal | 458 | 08-27 |
90543 | 소프트웨어| 리눅스 멀티부팅시 백업방법? [2] | 하늘색꿈 | 161 | 08-27 |
90542 | 윈 도 우| 윈도우 포맷 후 마이크로소프트 앱 프로그램 관련 질문 [4] | 한우차돌박 | 328 | 08-27 |
90541 | 윈 도 우| 윈도우7 종료 버튼에 절전, 최대 절전 모드 없앨 수 있나요? [3] | johbug | 352 | 08-26 |
90540 | 하드웨어| 제 첫 조립컴 견적에 대해 조언 부탁드려요 [6] | 조갱 | 447 | 08-26 |
90539 | 하드웨어| XP 드라이버 인식 문졔 ㅠㅠ [2] | 창공위 | 309 | 08-26 |
» | 소프트웨어| TRIM C코드 도움이 필요합니다 | 실시간 | 212 | 08-26 |
90537 | 윈 도 우| 윈도우10 부팅후 "D9333AF488E3" 이런게 하드에... [2] | 맹물 | 369 | 08-26 |
90536 | 윈 도 우| ThinPC SP1 한글언어팩 통합 CD이미지 요청 [4] | BOK | 360 | 08-26 |
90535 | 기 타| 비주얼베이직 질문 [4] | 퀵보드소년 | 272 | 08-26 |
90534 | 소프트웨어| PC 다운 현상이 생기네요 [7] | 오두막과시 | 753 | 08-26 |
90533 | 윈 도 우| Z590 보드에 윈도우7 설치가능한가요? [1] | MSTSC | 454 | 08-25 |
90532 | 소프트웨어| 안드로이드 PC에 설치 문의 드립니다. [19] | 하얀달 | 911 | 08-25 |
90531 | 소프트웨어| 웨일 브라우저 동영상 재생 문제.. [1] | 테츠로 | 312 | 08-25 |