비쥬얼 베이직 랜덤파일 에서 궁금한게 있어요

글쓴이2015.07.28 01:57조회 수 1366댓글 13

    • 글자 크기

이번 여름 계절에 비쥬얼베이직 교양을 들으면서 랜덤파일을 사용하는 법을 배웠습니다..


음.. 저게 정확한 명칭인진 모르겠지만 일단 ...ㅎㅎ


이왕 프로그래밍도 배웠겠다 간단하게 학점계산기를 만들어 보면 어떨까 하는 생각이 들더라구요.


 각 과목의 성적을 입력하면 데이터가 랜덤파일로 저장이 되고, 또 평점 계산도 할 수 있게끔 해봤는데..


뭐 데이터 저장이나 평점 계산등은 무난히 해결했는데


랜덤 파일에서 데이터를 삭제하는 방법에 대해서는 정말 잘 모르겠네요..


사실 저 부분은 배우질 않았거든요.


그냥 간단하게 변수 = nothing이나 변수 = "" 로 해봤는데 이렇게 하면 데이터가 사라지긴 하지만 그 흔적(?)이 데이터파일에 남아서 평점계산하는 프로시저에서 오류가 나더라구요.


혹시 랜덤파일을 사용할 때 어떤 특정한 데이터를 지우는 명령어나 아니면 방법이 있나요 ??


네이버에서는 파일을 새로 만들어서 지우고자 하는 데이터만 제외하고 나머지를 복사한 뒤 다시 새로 생성한 파일의 이름을 원래 데이터파일 명으로 바꾸면 된다고 하던데.. 그것도 어떻게 해야할지 잘 모르겠네요 ..


글을 좀 알아보기 어려우실지도 모르겠습니다만 도움 부탁드립니다!

    • 글자 크기

댓글 달기

  • 랜덤파일이 뭐징...
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 02:20
    음 강의자료에 그냥 랜덤파일이라고만 나와서 그렇게 적었는데 ..
    랜덤파일 형식으로 레코드를 저장하는 ..?

    fileopen fileget fileput fileclose 뭐 이런 명령어들 사용하는 ..

    그런거요 ㅋㅋ ㅜㅜ
  • 파일 입출력 말씀하시는 것 같은데 네이버에서 말한게 맞아요. 파일 오픈 하셔서 디스크에 있는 데이터들 모두 메모리에 올린 후(읽은 후) 원하시는 레코드 삭제 한후 같은 파일 이름으로 쓰기 하시면 되요.
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 02:45

    음 제가 인풋박스를 이용해서 일단 삭제를 원하는 데이터를 찾게하는데 까지는 잘 알겠는데.. 그 네이버에서 설명해 놓은 부분을 잘 모르겠네요..

    지금 짠거는 이렇거든요

            Dim search As String
            search = InputBox("삭제할 과목명을 입력해 주세요.", "찾기")
            For i = 1 To recCount                      <- recCount는 레코드의 끝 번호입니다.
                FileGet(filenumber, input, i)         <-filenumber는 freefile로 얻은 값이고 input은 선언한 구조체변수입니다.
                If search <> Strings.Trim(input.subject) Then          <-vbFixedString을 사용해서.. trim으로 공백을 지웠
                    FileClose(filenumber)
                    FileOpen(filenumber, "임시.txt", OpenMode.Random, , , recLength)
                    FilePut(filenumber, input, i)
                    FileClose(filenumber)
                    FileOpen(filenumber, "성적.txt", OpenMode.Random, , , recLength)  <-성적은 원래 쓰던 파일입니다.
                    Exit Sub
                End If
                If i = recCount Then
                    MsgBox("해당하는 과목명이 없습니다.")
                End If
            Next
            FileCopy("임시.txt", "성적.txt")
            FileOpen(filenumber, "성적.txt", OpenMode.Random, , , recLength)



    저 중간에 if문에서 틀린것 같긴 한데 뭘 어떻게 해야할지 잘 모르겠네요 ..

    이것만 하면 나머지는 다 완성인데.. ㅜ

  • 변수='' 나 변수=nothing을 하시면 메모리 상에서만 해당 변수의 값이 변경되지 디스크에 있는 데이터는 변경이 안되있어요. 변수를 바꾸신 후에 파일 쓰기를 다시 하셔야 메모리 상에서 변경한 데이터가 디스크에 써지죠.
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 02:45
    넵 다시 써넣었는데 그게 사라지는게 아니라 그냥 공백으로 남아있게 되더라구요
    원래 한 두줄정도 데이터가 채워졌다면 그렇게 하고 난 뒤에는 두줄이 공백으로 생겨서 오류가 ,. ㅜ
  • 삭제하고자 하는 데이터(값을 비워 놓은 구조체)를 디스크에 쓰면 공백으로 남겠죠? 삭제하고자 하는 데이터는 디스크에 쓰시면 안되요. 간단히 하나만 말하면 만약에 25번째에 입력되어 있는 과목를 지우고 싶다고 하시면 1에서 24번째 과목까지는 그대로 파일에 쓰되 25번째 과목은 파일에 쓰지 말고 26번째부터 n까지 있는 과목을 파일에 쓰시면 됩니다.
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 03:16
    늦은 시간에 정말 감사합니다!
    덕분에 대충 어떻게 해야 하는지 감이 잡히네요 ㅎㅎ
    지금은 머리가 안 돌아가서 내일 말씀하신 대로 해봐야겠어요

    정말 감사드립니다! 복 받으세요 ㅎㅎㅎ
  • 비베를 배운지 너무 오래 되서 문법이 기억 안나는데 next가 for문 돌리는 건가요? 매칭되는 과목을 찾으셨으면 아무것도 하지말고 그냥 i값만 증가 시킬 수 있도록 next만 넣어주시면 되구요. 임시.txt와 성적.txt의 파일 포인터를 동일하게 유지하시면 25번째 과목이 또 빈 상태로 저장 될테니 두 파일의 파일 포인터를 다른 변수로 하시는게 좋을 것 같네요.
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 03:17
    네 for-next 로 if끝에 end if 붙듯이 붙습니다!
    다시한번 조언 감사합니다 !
  • 설명이 부족한것 같아 코딩 하신걸로 다시 설명해 드릴게요. 지금 매칭이 안되면 임시.txt에 과목을 쓰시잖아요? 만약 매칭되는 과목이 25번째에 있다면 24번째까지는 성적에 있는 데이터를 임시에 쓸꺼에요. 이제 25번째를 확인했을때 이 과목이 삭제할 과목임을 알아차리고 for문 내 if문을 싱행 안하게 되죠. 이제 성적 파일에 26번째를 확인하는데 매칭이 안되니 임시 파일에 쓰겠죠? 이때 문제가 발생해요. 임시 파일에는 25번째 과목이 기록안되있으니 성적 파일에 26번째 과목은 임시 파일에 25번째 과목으로 가야 하는데 현재 짜신 코드는 성적 파일에 26번째 과목이 임시 파일에 26번째 과목으로 간다는 거죠. 따라서 임시 파일에 25번째 과목 항목은 텅 비어있는 거죠. 이를 방지하려면 성적 파일과 임시 파일의 파일 포인터를 따로 쓰셔야 해요. 임시 파일의 파일 포인터를 따로 j라고 주시고 임시 파일이 쓸때마다 j를 증가시켜 주세요. 그럼 i가 25일때 아무것도 안하고 i가 증가되서 26이 되는 반면에 j는 그대로 25이겠죠.
  • @끌려다니는 밤나무
    글쓴이글쓴이
    2015.7.28 03:37
    와 자세한 설명 정말 감사드립니다!!!
    덕분에 자려고 누웠다가 일어나서 다시 살펴봤는데..!!
    아직 깔끔하게 성공했다고는 할 수 없지만 어쨌든 데이터 지우는데 성공했어요!!!!
    정말 이 늦은 새벽에 초보적인 질문 다ㅂ변 엄청 상세히 해 주셔서 감사합니다..!! ㅎㅎㅎㅎ
    덕분에 새로 하나 배워가네용 ... !!
번호 제목 글쓴이 날짜
공지 욕설/반말시 글쓰기 권한 영구 정지10 저렴한 개불알꽃 2019.01.26
공지 식물원 이용규칙 (2018/09/30 최종 업데이트) - 학생회 관련 게시글, 댓글 가능17 흔한 달뿌리풀 2013.03.04
53533 멘토링발표났나요??7 민망한 닥나무 2014.02.21
53532 5영역 건강과 레포츠 질문점여.7 정겨운 나도송이풀 2012.07.26
53531 이번 달 멘토링 돈7 싸늘한 개나리 2014.08.13
53530 형님들 도르코면도날 싸게살수있는곳좀 추천드립니다.7 절묘한 초피나무 2019.04.22
53529 공대 책 원서 vs 번역본7 피곤한 때죽나무 2016.03.06
53528 효원재 입사7 유별난 노루삼 2017.07.11
53527 [블라인드 처리되었습니다.]7 저렴한 감나무 2018.06.17
53526 스튜디오얼굴에서 취업사진찍어보신분있나요?7 고상한 다래나무 2019.08.05
53525 7 초조한 게발선인장 2015.05.20
53524 [레알피누] 지질환경과학 부전공하려는데7 무거운 협죽도 2017.02.03
53523 복사집에서 양면복사 해보신 분?7 짜릿한 좀쥐오줌 2015.06.29
53522 더오로 룸비있나요?7 발랄한 솔나리 2015.02.21
53521 헐 성적 지금7 사랑스러운 골담초 2016.06.24
53520 .7 살벌한 노루참나물 2018.12.25
53519 군휴학할때 본인이 가야하나요??7 코피나는 서양민들레 2016.07.07
53518 도서관 커플7 착실한 솜방망이 2018.03.02
53517 학교앞에 레프트4데드 할수잇는 피시방없나요?7 나약한 섬백리향 2014.09.03
53516 재밌고들을만한 수업 추천좀 해주세요 ㅠ7 기쁜 측백나무 2016.03.31
53515 윤영득교수님 성적 원래 짜나요?7 청결한 원추리 2018.01.03
53514 족보 욕하는 사람들 특징7 흐뭇한 혹느릅나무 2019.01.03
첨부 (0)