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

찌질한 홍가시나무2015.07.28 01:57조회 수 1366댓글 13

    • 글자 크기

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


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


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


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


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


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


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


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


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


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


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

    • 글자 크기
적분잘하시는분 적분좀해주세요 (by 부지런한 바랭이) 전자회로 질문하나 있어요 (by 코피나는 개연꽃)

댓글 달기

  • 랜덤파일이 뭐징...
  • @끌려다니는 밤나무
    글쓴이글쓴이
    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
24909 요즘 까마귀가 왜이리 많아졌죠?..13 화난 살구나무 2016.10.20
24908 드림클래스 연수기간이랑 계절학기랑 겹치네요..13 끌려다니는 호랑버들 2017.06.20
24907 이런 청바지 어디서 살수있죠?13 귀여운 피라칸타 2014.09.01
24906 생각보다 전과하시는 분들이 많네요13 착잡한 밤나무 2016.07.25
24905 [레알피누] 전자공학과 형님들 질문13 돈많은 떡갈나무 2018.01.20
24904 [레알피누] 1학년인데... 뭐하고 살아야 될까요?13 더러운 보리수나무 2015.05.16
24903 성적이 확정되면 전체성적조회에서 성적을 조회하셔야 합니다.라고 뜨는데13 불쌍한 흰여로 2017.06.28
24902 글내림13 처참한 고광나무 2017.10.14
24901 어린여성과 친해지는 방법13 어두운 인삼 2012.11.23
24900 남자가 봉이냐13 친숙한 세쿼이아 2018.03.11
24899 자취방 가스비 얼마정도 나오나요?13 어설픈 자운영 2018.01.13
24898 성의과학!!13 질긴 파피루스 2012.12.11
24897 .13 거대한 칼란코에 2017.04.24
24896 적분잘하시는분 적분좀해주세요13 부지런한 바랭이 2013.06.13
비쥬얼 베이직 랜덤파일 에서 궁금한게 있어요13 찌질한 홍가시나무 2015.07.28
24894 전자회로 질문하나 있어요13 코피나는 개연꽃 2016.10.17
24893 개나소나 7급 한전 거리는데13 상냥한 흰꿀풀 2017.10.31
24892 2학년 1학기 복학하는 기계공 학생입니다.13 활달한 개망초 2018.01.16
24891 .13 절묘한 미국쑥부쟁이 2020.01.23
24890 [레알피누] .13 머리좋은 복숭아나무 2018.04.11
첨부 (0)