스트림

    게임 저장 구현 - 구조체를 파일로 저장하기

    배경 게임은 게임 내용을 저장하고 불러오는 기능이 필요하다. 저장과 불러오기는 유저의 하드디스크에 게임 파일을 저장하고 불러오는 일로서, 파일 입출력에 해당한다. 문자열로 패턴화하여 .txt 나 .csv 와 같은 문서를 작성해 게임의 내용을 저장할 수도 있으나 훨씬 더 코드를 작성하기 편하면서 유저가 함부로 세이브파일을 뜯어볼 수 없고 파일 확장자명도 내 마음대로 지정 가능하도록 하기 위해 바이너리 파일로 저장한다. 아이디어 저장할 정보들을 담는 구조체를 정의한다. 파일 경로과 저장할 정보들을 담는 구조체를 참조해 저장/불러오기 를 구현한다. 파일 경로에 해당하는 파일을 바이너리 모드로 연다. 구조체의 내용을 구조체의 크기만큼 메모리에 저장/불러오기 한다. SaveFile 구조체 // saveload.h..

    데이터베이스 구현

    아이디어 csv 문서를 파싱해 https://jartlife.tistory.com/53 csv 문서 파싱 csv 파일 csv(comma-separated values) 파일은 쉼표로 구분되는 문자열을 나열한 파일 형식이다. 엑셀과 메모장에서 csv파일을 쉽게 보고 편집할 수 있다. 데이터베이스를 csv 파일로 구축하면 각 필드를 jartlife.tistory.com stringstream 으로부터 https://jartlife.tistory.com/55 std::stringstream 을 통해 문자열을 값으로 문자열을 값으로 int, double, long 같은 primitive 자료형은 헤더만 추가하면 얼마든지 std::stoi, std::stod, std::stol 과 같은 함수를 통해 문자열을 실제..

    std::iostream 으로 std::tuple 입출력하기

    istream& operator>>, ostream& operator> 연산자를 오버로딩하지 않았으므로 std::istream 으로 std::tuple 을 입력받을 수는 없다. 같은 논리로 std::ostream 에 std::tuple 을 출력할 수도 없다. 따라서 std::istream 과 std::tuple 을 받는 operator>> 를 사용자가 오버로딩하면 충분히 std::istream 으로 std::tuple 을 입력받을 수 있고, std::ostream 과 std::tuple 을 받는 operator get( tup ); ss >> get( tup ); ss >> get( tup ); ss >> get( tup ); cout

    std::stringstream 을 통해 문자열을 값으로

    문자열을 값으로 int, double, long 같은 primitive 자료형은 헤더만 추가하면 얼마든지 std::stoi, std::stod, std::stol 과 같은 함수를 통해 문자열을 실제 값으로 변환할 수 있다. 그러나 각각의 함수 이름을 외워야 하는 것은 물론, 사용자 정의 클래스로 변환해주는 함수는 존재하지 않는다는 단점이 있다. stringstream std::stringstream 을 입력하면 문자열을 입출력 스트림처럼 다룰 수 있다. ( 입출력 스트림은 std::cin 과 std:: cout 으로 대표된다. ) 스트림에 출력된 내용은 스트림 내부에 문자열로 변환되어 저장되고 스트림에서 입력받을 때에는 문자열을 꺼내와 입력받을 객체의 타입에 맞게 변환한다. std::iostream 을 ..

    csv 문서 파싱

    csv 파일 csv(comma-separated values) 파일은 쉼표로 구분되는 문자열을 나열한 파일 형식이다. 엑셀과 메모장에서 csv파일을 쉽게 보고 편집할 수 있다. 데이터베이스를 csv 파일로 구축하면 각 필드를 쉼표로 구분하여 튜플들을 저장할 수 있다. 작성 규칙 각 필드는 띄어쓰기 없이 , 로 구분한다. 각 튜플은 개행문자 \n, \r 로 구분한다. 문자열 필드일 경우 " " 로 감싼다. 문자열 내에서 " 를 사용할 때에는 "" 와 같이 두 번씩 쓴다. 문자열 내에서의 ,(쉼표), \n, \r 는 구분자가 아닌 문자열 내의 문자로 취급한다. 집합 필드일 경우 { } 로 감싸고, , 대신 공백(띄어쓰기, 탭, 개행문자)으로 구분한다. 예시 "월요일","화요일","수요일","목요일" 200,..