Permalänk
Medlem

ADA95 - Hjälp

Hej ! Jag försöker skapa ett eget paket men när jag ska kompilera mitt program så får jag dessa felmeddelanden:

date_handling.adb:11:05: Expected type Date_Type defined at date_handling.ads:20

date_handling.adb:11:05: found type "Standard.String"

date_handling.adb:24:09: Expected type Date_Type defined at date_handling.ads:20

date_handling.adb:24:09: found type "Standard.String"

laboration4.adb:17:05: Invalid use of subtype mark in expression or call

Huvudprogrammet laboration4

with Ada.Integer_Text_IO ; with Ada.Text_Io ; with Ada.Float_Text_IO ; with date_handling ; use Ada.Integer_Text_IO ; use Ada.Float_Text_IO ; use date_handling ; procedure laboration4 is T1 : Date_Type ; begin Get(Date_Type) ; end laboration4 ;

date_handling.adb

package body Date_Handling is -- Proceduren Get som läser in ett datum procedure Get(Item : out Date_Type) is S : String(1 .. 10) ; begin Get(S) ; Item.Year := Integer'Value(S(1 .. 4)) ; Item.Month := Integer'Value(S(6 .. 7)) ; Item.Day := Integer'Value(S(9 .. 10)) ; end Get ; procedure Put(Item : in Date_Type) is begin Put(Item.Day); end Put ; end Date_Handling ;

date_handling.ads

package Date_Handling is -- Deklaration av datatypen som representerar en tid type Date_Type is private ; -- Deklaration av underprogram för in-och utmatning procedure Get(Item : out Date_Type) ; procedure Put(Item : in Date_Type) ; -- Definition av undantag som kan inträffa Time_Error : exception ; private -- Definitionen av den privata typen type Date_Type is record Year : Integer ; Month : Integer ; Day : Integer ; end record ; end Date_Handling ;

Tacksam för svar

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Medlem

Jag är osäker, men den klagar på rad 5 "procedure Get(Item : out Date_Type) is" och då antagligen på date_type, prova att flytta typdeklarationen till före deklarationen av underprogrammen.

package Date_Handling is -- Deklaration av datatypen som representerar en tid type Date_Type is private ; -- Definitionen av den privata typen type Date_Type is record Year : Integer ; Month : Integer ; Day : Integer ; end record ; -- Deklaration av underprogram för in-och utmatning procedure Get(Item : out Date_Type) ; procedure Put(Item : in Date_Type) ; -- Definition av undantag som kan inträffa Time_Error : exception ; private end Date_Handling ;

Vad innebär "type Date_Type is private ;"? det är inget jag känner igen (efter en grundkurs i ada)
/ Jonas

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av jangs
Jag är osäker, men den klagar på rad 5 "procedure Get(Item : out Date_Type) is" och då antagligen på date_type, prova att flytta typdeklarationen till före deklarationen av underprogrammen.

package Date_Handling is -- Deklaration av datatypen som representerar en tid type Date_Type is private ; -- Definitionen av den privata typen type Date_Type is record Year : Integer ; Month : Integer ; Day : Integer ; end record ; -- Deklaration av underprogram för in-och utmatning procedure Get(Item : out Date_Type) ; procedure Put(Item : in Date_Type) ; -- Definition av undantag som kan inträffa Time_Error : exception ; private end Date_Handling ;

Vad innebär "type Date_Type is private ;"? det är inget jag känner igen (efter en grundkurs i ada)
/ Jonas

Det innebär att användaren i huvudprogrammet inte kan hantera detaljerna i datatypen, i detta fall delarna i posten (Month, Day, Year).

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av mrjasmin
Det innebär att användaren i huvudprogrammet inte kan hantera detaljerna i datatypen, i detta fall delarna i posten (Month, Day, Year).

Borde jag nästan insett!

Fungerar programmet om du inte kör det som eget paket utan lägger alla funktionerna i laboration4?

Läste noggrannare, den klagar på "date_handling.adb:11:05: Expected type Date_Type defined at date_handling.ads:20"
Get(S) ;
Och det är ju din string S som är på rad 11 tecken 5? Varför förväntar den sig en Date_Type?

Permalänk
Medlem

För att han saknar Ada.Text_IO i paketet. Utan den så hittar kompilatorn bara en procedur Get. Den hämtar Date_Type och S är en String

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av erlc
För att han saknar Ada.Text_IO i paketet. Utan den så hittar kompilatorn bara en procedur Get. Den hämtar Date_Type och S är en String

Självklart är det därför, vet du vad detta felmeddelande betyder:

"expect procedure name in procedure call"

Tack

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

Medan vi snackar Ada i en tråd så tänka jag sno lite plats.

Jag har en post som jag skulle vilja skriva ut till en resultatsfil. Två variabler i denna post är dock inte strängar. Utan ena är ett heltal och den andra är en array med heltal och jag söker något fint sätt att göra om dessa till tecken och/eller sträng så jag kan skriva det till en fil så det är läsbart.

Permalänk
Medlem

Det finns ju lite olika sätt. Ett sätt är ju Integer'Image men får man fråga varför du vill ha det som en char? Varför inte skriva ut den som ett heltal istället?

För att skriva ut ditt fält så får du helt enkelt loopa igenom det, gärna i en Put-procedur för din fält-typ...

Permalänk
Hedersmedlem

Problemet är att jag vill skriva det till en extern textfil och då funkar det inte med integer utan det måste vara sträng eller tecken.

Permalänk
Medlem

Det behöver väl det ändå inte, har du kommit ihåg with & use Ada.Integer_Text_IO? Bör vara den du behöver tror jag.

---- Put(File, Int); ----

Detta fungerar utan problem, int är deklarerad som en integer.

Visa signatur

This time, like all times, is a very good one, if we know what to do with it.
If you don't go after what you want, you'll never have it. If you don't ask, the answer is always no. If you don't step forward, you're always in the same place

Permalänk
Hedersmedlem

jag använder ada.sequential_io för att läsa och skriva binära filer. Jag har redan försökt skriva en integer till filen och sett att det inte blir rätt. Men Integer'Image funkar bra Nu ska allt bara organiseras.

Permalänk
Citat:

Ursprungligen inskrivet av Shimonu
jag använder ada.sequential_io för att läsa och skriva binära filer. Jag har redan försökt skriva en integer till filen och sett att det inte blir rätt. Men Integer'Image funkar bra Nu ska allt bara organiseras.

Antar att du läser på LiU och tvingas på Ada. Du kanske till och med läser på Campus i Norrköping (och då har janpe?).

Hur som, labbarna lär vara relativt lika, och du lär hitta något som passar dig.
http://niklasblomqvist.se/ada/

Finns nog ingen editor som är så vidrig som ADAGIDE. Språket är bara jobbigt.
En befrielse att få börja med Javan!

Lab7 verkar använda sig av filskrivning.

Visa signatur

Citera, tack!
Har du läst tråden om strandhögtalare och andra musiklådor?

Permalänk
Hedersmedlem

Nej jag läser i Linköping. Får kika på det, tack

Permalänk
Medlem

Jag är assistent i bland annat TDDC68 och jag hittade då inte någon korrekt lösning bland de filer som fanns, tanken i lab sex är ju att du ska läsa in hela "personposter" från filen, inte separata tecken...

Därefter sker utskriften i klartext på en ny fil och då är det ju bra med Put(File, Int)

Permalänk
Medlem

Varför kan jag inte använda Put för filer när jag använder Ada.Sequential_IO ?
Får bland annat "File_Type is not visible". Vad gör jag för fel ?

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

inte helt säker nu men du måste nog skriva ut det tydligare.

Ada.Sequential_IO.File_Type för det finns en File_Type i Ada.Text_IO också

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av mrjasmin
Varför kan jag inte använda Put för filer när jag använder Ada.Sequential_IO ?
Får bland annat "File_Type is not visible". Vad gör jag för fel ?

För att det inte finns någon put för binärfiler. Då ska du använda read/write
Och som sagt så går labben ut på att skriva ut resultatet i en textfil...
Precis som Shimonu säger så måste man också explicit säga vilken sorts file_type man vill ha om man har med både ada.text_IO och sequential_IO.

Permalänk
Medlem

Men hur gör jag för att skriva ut de olika delarna ur posten "persondata" ? Det fungerar ju inte med Write(File, Persondata.Namn) .

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

Put_Line(File, Sträng)

Permalänk
Medlem

Får det inte att fungera. Vart gör jag fel ?

with Ada.Text_IO ; use Ada.Text_IO ; with Ada.Sequential_IO ; procedure laboration6 is type Intressen_Array is array(1 .. 10) of integer ; type Persondata is record Efternamn : String(1 .. 20) ; Namn : String(1 .. 20) ; Gatuadress : String(1 .. 20) ; Postadress : String(1 .. 20) ; Antal_Intressen : Integer ; Intressen : Intressen_Array ; end record ; package Read_Intressen is new Ada.Sequential_IO(Persondata) ; use Read_Intressen ; Source, Target : File_Type ; Post : Persondata ; begin Ada.Text_IO.Put("Ange en följd av intressen 1 till 15, max 10 st. Avsluta med 0: ") ; Open(Source, In_File, "REG.msdos.BIN") ; Create(Target, Out_File, "resultat.txt") ; while not End_Of_File(Source) loop Read(Source, Post) ; Put_line(Target, Post.Namn) ; end loop ; Close(Source) ; end laboration6 ;

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

Vad är problemet?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Shimonu
Vad är problemet?

Får massa kompilationsfel, som File type is hidden.

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

File_Type is hidden beror som sagt på att du måste definiera vilken File_Type du ska ha. I ditt fall är det ju en Read_Intressen.File_Type eftersom det är ett sånt nytt paket du ha skapat.

Ibland blir det många rader kompilationsfel men det kan bero på ett enkelt fel. Så fixa File_Type så kan det nog bli en del mindre fel. Är det något du inte förstår så fråga, kom annars tillbaka när du fixat problemet.

Permalänk
Medlem

Har fått det att fungera nu, tack så mycket för hjälpen

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3

Permalänk
Hedersmedlem

Här kan jag inte säga något definitivt. Jag vet inte om det isf beror på att du nu har din utfil som en Read_Intressen.File_Type. Jag hade det som en Ada.Text_IO.File_Type och då funkade det bra med Put_Line precis som du gjort.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Shimonu
Här kan jag inte säga något definitivt. Jag vet inte om det isf beror på att du nu har din utfil som en Read_Intressen.File_Type. Jag hade det som en Ada.Text_IO.File_Type och då funkade det bra med Put_Line precis som du gjort.

Har fixat det nu. Hade min utfil som Read_Intressen men skulle självklart haft den som Ada.Text_IO.File_type.

Visa signatur

Corsair 600W Gaming Edition | Intel Core i5 4670K | 8GB DDR3 RAM | Corsair Carbide 330R | Sapphire Radeon R9 290 | Arctic Accelero Xtreme 3