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

글쓴이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 에휴.. 자리 독점..3 도도한 조록싸리 2014.09.06
53532 컴퓨터활용능력 2급 이상+워드프로세서 1급2 처참한 개미취 2014.09.19
53531 전공기초 재수강6 착잡한 왕솔나무 2014.11.01
53530 한수원vs현차vs에쓰오일vsSKT7 털많은 금강아지풀 2014.11.29
53529 학생(남)이 입을 결혼식용 정장 싼거 추천 부탁드려요!8 착실한 흰괭이눈 2015.01.02
53528 전자공학과 성님들~~5 서운한 사철나무 2015.02.09
53527 내일 수강정정은 몇시부터 열리나요?5 해박한 상추 2015.02.28
53526 기성회비 사건은 이렇게 마무리 되나보네요...1 무거운 가는괴불주머니 2015.04.16
53525 민법총칙!9 푸짐한 뻐꾹채 2015.04.22
53524 경암헬스2 밝은 자주달개비 2015.05.16
53523 경영학과 거시경제학 개설6 수줍은 감초 2015.07.25
53522 헬스보이님들 질문좀 받아 주십쇼 (운동자극부위 잘 아는 헬스걸 분들도..)6 불쌍한 붓꽃 2015.07.29
53521 밤에 온천천?3 게으른 쉽싸리 2015.07.30
53520 어깨충돌증후군5 까다로운 갈퀴나물 2015.09.04
53519 국가장학금 2유형 들어왔나요?7 개구쟁이 개구리밥 2015.12.11
53518 편의점 알바해보신분들15 해박한 시계꽃 2015.12.19
53517 일부러 1학점 남겼는데 실영1 청렴한 줄민둥뫼제비꽃 2015.12.29
53516 일선 신청할때요..2 화사한 금낭화 2016.01.30
53515 형광주황색 과잠 어디인가요?2 겸손한 오미자나무 2016.03.16
53514 무투표 하는 사람들이 있으면 그러한 사람들의 정치적 입장을 대변할 집단이 등장해야죠41 청렴한 고추나무 2016.04.13
첨부 (0)