home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / bix / dif.pas < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  3KB  |  142 lines

  1. {TITLE: DIF files (to Lotus 1-2-3 or other such) from Turbo
  2. Here are some Turbo Pascal procedures that you can use to write DIF
  3. files that can be recognized by Lotus 1-2-3 or other spreadsheet
  4. program.}
  5.  
  6.  
  7. Var
  8.    WKSrows     : Integer;
  9.    WKScolumns  : Integer;
  10.    FileName    : Str20;
  11.  
  12.  
  13.  
  14.  
  15. Procedure DIFWrite (TypInd   : Integer;
  16.                     NumValue : Real;
  17.                     StrValue : Str255 );
  18.  
  19. Var   SNum: Str255;
  20.  
  21. Begin
  22.   Str (NumValue : 15 : 4, SNum);
  23.  
  24.   While SNum[1] = ' ' Do
  25.         Delete (SNum, 1, 1);
  26.  
  27.   While SNum [Length(SNum)] = '0' Do
  28.         Delete (SNum, Length(SNum), 1);
  29.  
  30.   If SNum [Length(SNum)] = '.' then
  31.      Delete (SNum, Length(SNum), 1);
  32.  
  33. { write the TypeIndicator, Numeric Value, & String Value }
  34.  
  35.  Writeln (DIFFile,   TypInd,  ',',   SNum);
  36.  
  37.  If TypInd = 0 then
  38.     Writeln (DIFFile,  'V')
  39.  Else
  40.  If TypInd = -1 then
  41.     Writeln (DIFFile,  StrValue)
  42.  Else
  43.     Writeln (DIFFile,  '"',  StrValue,  '"');
  44.  End;
  45.  
  46. Procedure DIFString (S : Str255);
  47. Begin
  48.   DIFWrite (1, 0, S);
  49.   End;
  50.  
  51. Procedure DIFNumber (N : Real);
  52. Begin
  53.   DIFWrite (0, N, '');
  54.   End;
  55.  
  56. Procedure DIFHeader (  RowCount    : Integer;
  57.                        ColumnCount : Integer );
  58. Begin
  59.   Writeln (DIFFile, 'TABLE');
  60.   DIFWrite(0, 1, '');
  61.  
  62.   Writeln (DIFFile,     'VECTORS');
  63.   DIFWrite(0, Int(ColumnCount), '');
  64.  
  65.   Writeln (DIFFile,     'TUPLES');
  66.   DIFWrite(0, Int(RowCount), '');
  67.  
  68.   Writeln (DIFFile,     'DATA');
  69.   DIFWrite(0, 0, '');
  70.   End;
  71.  
  72. Procedure BegOfTuple;
  73. Begin
  74.   DIFWrite (-1, 0, 'BOT');
  75.   End;
  76.  
  77. Procedure EndOfDIF;
  78. Begin
  79.   DIFWrite (-1, 0, 'EOD');
  80.   End;
  81.  
  82. Procedure DoEmptyVector;
  83. Begin
  84.   DIFWrite (1, 0, '');
  85.   End;
  86.  
  87. Procedure DoEmptyTuple;
  88. Var  I : Integer;
  89. Begin
  90.   BegOfTuple;
  91.   For I := 1 to WKSColumns Do
  92.       DoEmptyVector;
  93.   End;
  94.  
  95. Procedure RestOfTuple (NextColumn : Integer);
  96.  
  97. { this procedure "fills out" a row in which only the first few }
  98. { columns have been used. }
  99.  
  100. Var  I : Integer;
  101.  
  102. Begin
  103.   For I := NextColumn to WKSColumns Do
  104.       DoEmptyVector;
  105.   End;
  106.  
  107. Procedure LastDIFCall;
  108. Begin
  109.   EndOfDIF;
  110.   Writeln(DIFfile, ^Z);
  111.   Close (DIFfile);
  112.   End;
  113.  
  114. Procedure FirstDIFCall;
  115. Begin
  116.  
  117.   WKSrows := 0;                  {**** because we don't know ***}
  118.                                  {   (Lotus 1-2-3 won't care)   }
  119.  
  120.   WKScolumns := 18;              {          or whatever         }
  121.   FileName   := 'Budget.DIF';    {           "    "             }
  122.  
  123.   Assign (DIFfile, FileName);
  124.   Rewrite(DIFfile);
  125.  
  126.   DIFHeader (  WKSrows,  WKScolumns);
  127.  
  128.   DoEmptyTuple;                  {optional, I use it as a separator}
  129.  
  130.   End;
  131.  
  132. (*declare STR20 as a String[20] type before the incorporation of the
  133. above code.*)
  134.  
  135.  
  136. {I forgot.  Also declare
  137.  
  138.     DIFFile : Text;
  139.  
  140. somewhere ahead of the code.}
  141.  
  142.