Ada: Schreiben in Dateien innerhalb einer Blockanweisung
Ich habe es mit einem Array zu tun, dessen Länge bei der Ausführung des Programms festgelegt wird. Also benutze ich ablock
Anweisung, in der ich die Grenzen des Arrays festlegen kann.
Ich habe Probleme, die Elemente des Arrays in eine Datei zu schreibenda ich einen stub für den schreibvorgang benutzt habe. Ich habe den Stub entfernt, um alles im selben Code zu haben. Obwohl jetzt mein Codekompiliert und läuftwird nicht in die Datei geschrieben. Hier ist der Code:
<code>with Ada.Float_Text_IO; with Ada.Integer_Text_IO; with Ada.Text_IO; procedure Compute_Parameters is Spin_Speed, Whirling_Speed : Float; Time_Step, Rotor_Revolutions : Float; Number_Of_Steps : Float; begin Ada.Text_IO.Put("Enter the spin speed "); Ada.Float_Text_IO.Get (Item => Spin_Speed); Ada.Text_IO.New_Line (1); Ada.Text_IO.Put("Enter the whirling speed "); Ada.Float_Text_IO.Get (Item => Whirling_Speed); Ada.Text_IO.New_Line (1); Ada.Text_IO.Put("Enter the time step "); Ada.Float_Text_IO.Get (Item => Time_Step); Ada.Text_IO.New_Line (1); Ada.Text_IO.Put("Enter the number of revolutions of the rotor "); Ada.Float_Text_IO.Get (Item => Rotor_Revolutions); Number_Of_Steps := (360.0 / (Time_Step * Whirling_Speed)) * Rotor_Revolutions * (Whirling_Speed / Spin_Speed); declare type Vector is array (Integer range <>) of Float; Time_Vector : Vector (1 .. Integer (Float'Truncation (Number_Of_Steps)) + 1); Rotor_Position_Degrees : Vector (1 .. Integer (Float'Truncation (Number_Of_Steps)) + 1); Count : Integer := 0; Start : Float := 0.0; Step : Float := Time_Step; Output_Data_File : File_Type; procedure Write_Files (Output_File : File_Type; Out_1 : Integer; Out_2 : Float; Prec : Natural := 5 ) is begin Ada.Integer_Text_IO.Put (File => Output_File, Item => Out_1); Ada.Text_IO.Put (Output_File, " "); Ada.Float_Text_IO.Put (File => Output_File, Item => Out_2, Fore => 6, Aft => Prec, Exp => 0); Ada.Text_IO.New_Line (Output_File); end Write_Files; begin -- begin of Declare Ada.Text_IO.Put ("Put file name to write: "); Create (Output_Data_File, Out_File, Get_Line); for I in 1 .. Time_Vector'Length loop Count := Count + 1; Time_Vector(I) := Start + Step * Float(I-1); Put (Integer'Image(Count)); Ada.Text_IO.Put(" "); Rotor_Position_Degrees(I) := Spin_Speed * Time_Step * Float(I-1); Ada.Float_Text_IO.Put (Item => Rotor_Position_Degrees(I), Fore => 5, Aft => 1, Exp => 0); Ada.Text_IO.New_Line(1); --write to file Write_Files (Output_Data_File, Out_1 => Count, Out_2 => Rotor_Position_Degrees(I) ); end loop; close(Output_Data_File); end; -- end of Declare end Compute_Parameters; </code>
Mir fällt auf, dass die 2 Zeilen gleich danach sindbegin
imDeclare
werden überhaupt nicht ausgeführt:
<code>Ada.Text_IO.Put ("Put file name to write: "); Create (Output_Data_File, Out_File, Get_Line); </code>
Was mache ich falsch?
Vielen Dank...