使用Ada读取和写入文件(解析数据以进行处理)

时间:2016-09-26 18:20:56

标签: file ada

对于那些了解Ada编程的人来说,有什么方法可以将文件中的数据导入到该程序中,以便在此算法中使用它?

使用Ada我正在尝试弄清楚如何从文件中读取一系列矩阵连接数据网格然后解析数据,保留字段名称以便稍后输出,同时使用算法中的0和1。

理想情况下,输入数据将如下所示(行数和列数将有所不同,输入文件中将有多个具有不同行和列名称的数据集(矩阵)。

示例:(忽略下划线)

________ Name1_Name2_Name3_NameN

姓名1 _____ 0_____1_____0_____0

名称2 _____ 0 0 _____ _____ 1 _____ 1

姓名3 _____ 0_____0_____1_____0

NameN _____ 0 _____ 1 _____ 0 0 _____

这是我到目前为止没有从文件读取和输出到文件实现的代码。

WITH Text_IO; USE Text_IO;      -- This gets the IO facility. 
WITH Ada.Integer_Text_IO; USE Ada.Integer_Text_IO; -- This gets the integer IO facility. 
--**** 
-- use zero elements in array to store size 0,0 and row/column names? 


-- read size 
-- use size to read names of columns 
-- store in array 


-- use size to read first row of data? 
-- as data is read convert from 0/1 to true false and store? 

-- if value read = 0 => array2d(n,n) = false 
-- if value read = 1 => array2d(n,n) = true 


-- * main procedure * 
PROCEDURE BooleanTest IS              -- Main, but no special name is needed.BEGIN 

   N : Integer := 4; -- max size ** to be read 
   OutputConvertion : Integer; 
   Array2d: ARRAY (1..N, 1..N) OF boolean; 

-- * main procedure starts begins* 
BEGIN 
   -- read array size and column names 

   -- hard coded to be read from file 

   Array2d(1, 1) := false; 
   Array2d(1, 2) := false; 
   Array2d(1, 3) := false; 
   Array2d(1, 4) := false; 

   Array2d(2, 1) := false; 
   Array2d(2, 2) := true; 
   Array2d(2, 3) := false; 
   Array2d(2, 4) := true; 

   Array2d(3, 1) := false; 
   Array2d(3, 2) := true; 
   Array2d(3, 3) := false; 
   Array2d(3, 4) := true; 

   Array2d(4, 1) := true; 
   Array2d(4, 2) := false; 
   Array2d(4, 3) := true; 
   Array2d(4, 4) := false; 

   FOR I IN 1..N LOOP 
      FOR J IN 1..N LOOP 
         IF Array2d(J,I) = true THEN --true nodes connected 
            FOR K IN 1..N LOOP 
               Array2d(J,K) := Array2d(J,K) OR Array2d(I,K); 
            END LOOP; 
         END IF; 
      END LOOP; 
   END LOOP; 

-- *********** output to screen ************ 

   FOR I IN 1..N LOOP 
      FOR J IN 1..N LOOP 
         IF Array2d(I,J) = True THEN 
            OutputConvertion := 1; 
         ELSE 
            OutputConvertion := 0; 
         END IF; 
         Put( OutputConvertion); 
         Put(" ");                 
      END LOOP; 
      New_Line(1); 
   END LOOP; 


END BooleanTest; 
-- * main procedure ends * 

1 个答案:

答案 0 :(得分:1)

我不确定你的问题是什么,但我感觉不仅有I / O,还有约束数组与无约束数组,布尔值表示,以及可能使用二进制I / O与文本I / O的混淆。如果您有行和列的标签,它们是随机分配的,还是行中的概念固定值,可以在您的程序中枚举,如下例所示:

类型名称是(Name_1,Name_2,Name_3,Name_4,Name_5,Name_6); 类型矩阵是布尔值的数组(名称范围<>,名称范围<>);

True和False的正确文本值为True和False,而不是1和0。 考虑读取和写入流文件的可能性,这将极大地简化矩阵类型实例的I / O,这可能具有不同的大小。