Q&A

  • 클래스 정의시 문제
최용일님 감사합니다.

Text 파일은 제가 String으로 읽어서 발생한 문제가 맞습니다.

잘 해결했습니다.

또 다른 질문...

질문 1. 재선언이 가능한지?
만약 Class 내부에서 다음과 같이 정의를 했습니다.
  TShipStation = Class(TObject)
  Public
  Ship_St of Array[1..100] : Integer;
  End;

지금 Array가 100개인데요

Procedure 내부에서 다음과 같이 100개 가 아닌 27개 까지만 재 선언은 어떻게 하는지요?


질문2. 비주얼베이직에서는 Type을 다음과 같이 정의해서 쓰는 경우가 있는데
델파이도 가능한지요?

//////////////////////////////Class 정의

Type PointDataStructure
    
    x As Single
    
    y As Single
    
    z As Single
    
End Type

Type ShipContourDataStructure
    
    NumofPoint As Integer
    
    point() As PointDataStructure
    
End Type

Public ShipLine() As ShipContourDataStructure

Type Mb_ShipContourDataStructure

     NumofPoint As Integer
    
     point() As PointDataStructure
    
End Type
////////////////////////////Class 정의


이런 방법으로 정의해 놓고 다음과 같이 사용합니다.

가능한지요

    Mb_InFile = SetPath + "\" + MyTxt2.Text + ".mby"
  
    Mb_InNum = FreeFile
    
    Open Mb_InFile For Input As Mb_InNum
        
    Line Input #Mb_InNum, Mb_sStaCnt
        
    Mb_iStacnt = CInt(Mb_sStaCnt)
        
    ReDim Preserve Mb_ShipLine(1 To Mb_iStacnt)
        
    Mb_ShipLineCnt = Mb_iStacnt
  
    For i = 1 To Mb_iStacnt - 1
          
      Line Input #Mb_InNum, Mb_Sstrall
            
      Mb_ILineCnt = CInt(Mb_Sstrall)
                      
      Mb_ShipLine(i).NumofPoint = Mb_ILineCnt
            
      ReDim Mb_ShipLine(i).point(1 To Mb_ILineCnt)
            
      For j = 1 To Mb_ILineCnt
                
       Input #Mb_InNum, Mb_ShipLine(i).point(j).x, Mb_ShipLine(i).point(j).y, Mb_ShipLine(i).point(j).z ,   <--이부분
            
      Next
        
    Next
        
    Close #Mb_InNum

이와 같이 x,y,z의  array를 사용하는데 방법이 있는지요?
3  COMMENTS
  • Profile
    이중철 2004.05.27 22:07
    type
      PointDataStructure = record
         x : Single
         y : Single
         z : Single
      end;
      TShipStation = Class(TObject)
      Public
        Ship_St of Array PointDataStructure;
      End;


    사용할때 비베에서는 Redim  

    Delphi 에서는 Setlength(Ship_St, 27);

    ^^ 똑같죠

    소스에서 보면
      ReDim Preserve Mb_ShipLine(1 To Mb_iStacnt)
    이부문은
      Setlength(Mb_ShipLine, Mb_ILineCnt - 1);
      For j := 0 To Mb_ILineCnt - 1
    이런식으로 대치됩니다.


  • Profile
    다롱이 2004.05.27 23:03

    --------------------------------------------------------------------
    답변 잘 봤습니다.

    그런 데 문제가 있어요~~

    아래와 같이 ShipLine()이 하나의 Array이고 이것 바로 밑에 Point()가 또 Array로 구성되어 있거든요...

    Mb_ShipLine(i).point(j).x, Mb_ShipLine(i).point(j).y, Mb_ShipLine(i).point(j).z

    예를 들어 Mb_ShipLine(27).Point(12).x
                  Mb_ShipLine(27).Point(12).y
                  Mb_ShipLine(27).Point(12).z

    와 같을 경우는 어떻게 하지요...

    결국에 생기는 데이타는 1~27에 각각 12개의 Data가 생기지요..

    27x12= 324개의 X Data, Y Data, Z Data가 생기지요

    이것도 가능한가요
  • Profile
    Crazy 2004.05.28 07:29
    참고하세요
    var

      A : array of array of string;
      I, J : Integer;
    begin
      SetLength(A, 10);
      for I := Low(A) to High(A) do
      begin
        SetLength(A[I], I);
        for J := Low(A[I]) to High(A[I]) do
          A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
      end;