home *** CD-ROM | disk | FTP | other *** search
- PROGRAM SpreadSheetFileConversion;
-
- VAR FilVar: TEXT; Choice: CHAR;
- Line, StringRem, AllBlanks : STRING[255];
- Row, Col, Delimit, NrCells, CellWidth, I : INTEGER;
-
- TYPE FileName = STRING[12];
- DataStrings = ARRAY[1..128] of STRING[255];
- String128 = STRING[128];
- FileTypes = SET OF CHAR;
-
- VAR InputFile, OutputFile: FileName;
- Strings : DataStrings;
- ValidFileTypes : FileTypes ;
-
- PROCEDURE GenerateBlankField; VAR I : INTEGER;
- BEGIN
- AllBlanks := '';
- FOR I:= 1 to CellWidth DO BEGIN AllBlanks := AllBlanks + ' '; END;
- END; (* PROCEDURE GenerateBlankField *)
-
- PROCEDURE StripBlanks (VAR Incoming, Stripped :String128);
- VAR BlankTrue : BOOLEAN ;
-
- BEGIN
- Stripped := Incoming;
- BlankTrue := TRUE ;
-
- (* Leading Blanks *)
- WHILE BlankTrue AND (Stripped <> '') DO
- BEGIN
- BlankTrue := ( COPY(Stripped,1,1) = ' ') ;
- IF BlankTrue THEN DELETE (Stripped,1,1) ;
- END ;
-
- (* Trailing Blanks *)
- BlankTrue := TRUE ;
- WHILE BlankTrue AND (Stripped <> '' ) DO
- BEGIN
- BlankTrue := (' '= COPY(Stripped, LENGTH (Stripped), 1) ) ;
- IF BlankTrue THEN DELETE (Stripped, LENGTH (Stripped), 1) ;
- END;
-
- END; (* PROCEDURE StripBlanks *)
-
- PROCEDURE PlaceDelimiters;
- VAR PrevBlank, ThisBlank: BOOLEAN ; J, Limit : INTEGER ;
-
- BEGIN
- FOR J := 1 to Row DO
- BEGIN
- Line := Strings[J] ;
- PrevBlank := COPY (Line,1,1) = ' ' ;
- Limit := LENGTH (Line);
- FOR I := 2 to (Limit -1) DO
- BEGIN ThisBlank := COPY (Line, I, 1) = ' ' ;
- IF ( (NOT PrevBlank) AND ThisBlank)
- THEN BEGIN
- DELETE (Strings [J],I,1);
- INSERT (CHR(124), Strings[J],I) ;
- END ;
- PrevBlank := ThisBlank ;
- END ; (* FOR I DO *)
-
- END; (* FOR J DO *)
-
- END; (* PROCEDURE Placedelimiters *)
-
-
- PROCEDURE ReadFiletoArray (InputFile: FileName);
- BEGIN ASSIGN (FilVar, InputFile);
- RESET (FilVar);
- I := 1;
-
- WHILE NOT EOF(FilVar) DO
- BEGIN ReadLn (FilVar, Line);
- Strings[I] := Line;
- I := I + 1;
- END; (* WHILE NOT EOF *)
-
- Row := I - 1;
- END ; (* PROCEDURE ReadFileToArray *)
-
-
- PROCEDURE ColumnCount (VAR Count: INTEGER); VAR Point: INTEGER;
- BEGIN
- Point := 1; Count := 0; StringRem := Strings[Row];
-
- WHILE Point > 0 DO
- BEGIN
- Point := POS (CHR(Delimit), StringRem);
- Count := Count + 1;
- StringRem := COPY (StringRem, Point +1, 255) ;
- END;
- END ; (* PROCEDURE ColumnCount *)
-
-
- PROCEDURE WriteDIF (OutputFile: FileName) ;
- VAR FileNameDIF, RowString, ColString : STRING[12];
- Piece, NewPiece : String128;
- PieceValu : REAL; Code, I, J, Point, PW : INTEGER;
-
- FUNCTION NewPointer: INTEGER ;
- BEGIN
- IF Choice IN ['D', 'T']
- THEN NewPointer := POS (CHR (Delimit), STRINGS[J])
- ELSE BEGIN
- IF LENGTH (Strings[J]) <= CellWidth
- THEN NewPointer := 0
- ELSE NewPointer := CellWidth ;
- END;
- END; (* FUNCTION *)
-
- FUNCTION PieceWidth : INTEGER ;
- BEGIN
- IF Choice IN ['D', 'T']
- THEN PieceWidth := Point
- ELSE PieceWidth := CellWidth ;
- END; (* FUNCTION *)
-
- BEGIN (* PROCEDURE WriteDIF *)
- FileNameDIF := OutPutFile + '.DIF';
- ASSIGN (FilVar, FileNameDIF) ; REWRITE (FilVar);
-
- (* --- Write DIF HEADER --- *)
- BEGIN
- WriteLn (FilVar, 'TABLE'); WriteLn (FilVar, '0,1');
- WriteLn (FilVar, '""'); WriteLn (FilVar, 'VECTORS');
- Write (FilVar, '0,');
- STR (Row, Rowstring);
- WriteLn (FilVar, RowString); WriteLn (FilVar, '""' );
- WriteLn (FilVar, 'TUPLES') ; Write (FilVar, '0,') ;
- STR (Col, ColString);
- WriteLn ( FilVar, ColString); WriteLn (FilVar, '""' ) ;
- WriteLn (FilVar, 'DATA'); WriteLn (FilVar, '0,0' ) ;
- WriteLn (FilVar, '""');
- END; (* Writing Header *)
-
- (* --- WRITE TUPLES --------- *)
- FOR I := 1 to Col DO
- BEGIN
- WriteLn (FilVar,'-1,0') ; WriteLn (FilVar, 'BOT' ) ;
-
- FOR J := 1 to Row DO
- BEGIN
- Point := 1 ;
- IF Point >0 THEN
- BEGIN
- Point := NewPointer;
-
- IF Point = 0
- THEN Piece := Strings[J]
- ELSE Piece := COPY (Strings[J],1,PieceWidth);
- PW := LENGTH (Piece) ;
- DELETE (Strings[J], 1, PW );
-
- IF Choice IN ['D', 'T'] THEN
- IF (PW >0) AND (COPY (Piece, PW, 1) = CHR(Delimit))
- THEN DELETE (Piece, PW, 1);
-
- END; (* IF POINT > 0 *)
-
- IF Choice = 'F' THEN BEGIN IF ((Piece <> AllBlanks) AND (Piece<>''))
- THEN StripBlanks (Piece, NewPiece)
- ELSE NewPiece := Piece;
- END
- ELSE StripBlanks (Piece, NewPiece) ;
-
- (* Determine if Number or String *)
- VAL (NewPiece, PieceValu, Code) ;
- IF Code = 0 THEN
- BEGIN (* Numerical *)
- Write (FilVar, '0,');
- WriteLn (FilVar, NewPiece) ;
- WriteLn (FilVar, 'V' ) ;
- END
-
- ELSE (* STRING *)
- BEGIN
- WriteLn (FilVar, '1,0' );
- WriteLn (FilVar, '"', NewPiece, '"') ;
- END; (* String *)
-
- END ; (* For J = 1 to Row *)
-
- END ; (* For I = 1 to Col *)
- (* ------------- End TUPLES ------------ *)
-
- (* Write End Designator *)
- WriteLn(FilVar, '-1,0' ) ; WriteLn (FilVar, 'EOD' ) ;
-
- CLOSE (FilVar);
- END ; (* WriteDIF *)
-
-
- BEGIN (* - - - MAIN PROGRAM - - - *)
- Write ('Input File Name ?'); ReadLn (InputFile) ;
- Write ('Output File Name ? '); ReadLn (OutputFile) ;
- ValidFileTypes := ['D', 'F', 'T'] ;
- CLRSCR ; Choice := 'X';
-
- WHILE NOT (Choice IN ValidFiletypes) DO
- BEGIN
- WriteLn ('Table (delimited by blanks) - Type a "T"...');
- WriteLn ('or a Delimited File - Type a "D"...');
- WriteLn ('or a Fixed Format file - Type an "F"...');
- ReadLn (Choice);
- Choice := UPCASE (Choice);
- END ;
-
- CASE Choice OF
-
- 'D': BEGIN
- WriteLn ('Delimiter ASCII Value ?');
- ReadLn (Delimit);
- END;
-
- 'T': Delimit := 124 ;
-
- 'F': BEGIN
- WriteLn ('Number of fields (cells) per Record (Row) ?');
- ReadLn (NrCells) ;
- WriteLn ('Characters per field (Width of cell) ?');
- ReadLn (CellWidth);
- GenerateBlankField;
- END;
- END; (* CASE Choice OF *)
-
-
- ReadFileToArray (InputFile);
-
- CASE Choice OF
- 'T': BEGIN PlaceDelimiters; ColumnCount (Col); END;
- 'D': ColumnCount (Col) ;
- 'F': Col := NrCells ;
- END ; (* CASE Choice OF *)
-
- WriteDIF (OutputFile);
-
- END.