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

글쓴이2015.07.28 01:57조회 수 1382댓글 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
168341 우왓 이런곳이 있다니!35 부지런한 쑥갓 2011.07.25
168340 사랑 상담..7 참혹한 석잠풀 2011.07.25
168339 1학년 하고 군대 vs 2학년 하고 군대 vs 졸업하고 군대14 이상한 시계꽃 2011.07.25
168338 남자분들만 보세요11 ♥ (부자 가는괴불주머니) 2011.07.26
168337 고백을 못 해서 사랑하는 사람을 여럿 놓친 거 같아요2 안일한 물박달나무 2011.07.26
168336 일상이 귀찮고 재미가 없어요7 처절한 가지 2011.07.27
168335 방구때문에 미치겠어요16 고고한 왜당귀 2011.07.27
168334 죽음에 대한 고민12 ♥ (부자 가는괴불주머니) 2011.07.27
168333 93년생 11학번분들10 촉촉한 양지꽃 2011.07.27
168332 샤우팅 하고싶어요5 추운 졸방제비꽃 2011.07.27
168331 과에 지도교수님이 없는 것이 고민10 ♥ (부자 가는괴불주머니) 2011.07.28
168330 공무원시험합격하고군대vs군대갔다와서공무원시험4 ♥ (부자 가는괴불주머니) 2011.07.28
168329 1학년 2학기 마치고 군대를 가야하는데...7 ♥ (부자 가는괴불주머니) 2011.07.28
168328 컴퓨터 좀 한다는 소문때문에 인생이 피곤해요12 특이한 지칭개 2011.07.28
168327 9학기를 할지 말지 고민..6 못생긴 댑싸리 2011.07.28
168326 공강시간에 뭐할지가 고민..6 때리고싶은 땅빈대 2011.07.29
168325 C+ 재수강 하시나요 대부분?11 ♥ (부자 가는괴불주머니) 2011.07.29
168324 수강신청 팅길까봐 고민입니다 ㅠㅠ134 무심한 칠엽수 2011.07.29
168323 성적이 너무 안좋아요 2학년인데 2.5임.7 ♥ (부자 가는괴불주머니) 2011.07.30
168322 다이어트를 3주간 했는데8 ♥ (부자 가는괴불주머니) 2011.07.30
첨부 (0)