Προς το περιεχόμενο

Pascal Runtime error 123


Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω τον παρακάτω κώδικα και μου βγάζει Runtime Error 123 μπορεί κανείς να βοηθήσει;

Γνωρίζω πως το Runtime Error 123 είναι : ERROR_INVALID_NAME αλλά και πάλι δεν μπορώ να βγάλω άκρη.  (  http://narkive.com/yFy16Nvq:7.534.18  )

 

program iniz;

var arxeio:text;
ono,ari:string;
kin:longint;
begin
writeln ('Γράψε το ονοματεπώνυμό σου:');
readln (ono);
writeln ('Γράψε τον αριθμό κυκλοφορίας του οχήματος σου:');
readln (ari);
writeln('Γράψε το κινητό τηλέφωνο σου:');
readln(kin);
assign(arxeio,'‪C:\Users\Dimitristhras\Desktop\file.txt');
append(arxeio);
writeln (arxeio,ono);
writeln (arxeio,ari);
writeln (arxeio,kin);
writeln (ono);
writeln (ari);
writeln (kin);
close (arxeio);
end.

post-334179-0-04171500-1455195834_thumb.png

Δημοσ.

Είσαι σίγουρος ότι μπορείς με readln() να πάρεις αριθμό; Μήπως να έπαιρνες string καλύτερα, για το τηλέφωνο. Αν και αυτό θα το έβρισκε ο compiler. Μάλλον έχεις ανοικτό αρχείο και σε πετάει το πρόγραμμα..

Δημοσ.

και γω αυτό πίστευα 
κιόμως δεν εχω τίποτα ανοιχτό .. ούτε κάποιο process στα windows ουτε τίποτα ..
προσπάθησα να το τρέξω σε άλλο υπολογιστή αλλά είχα το ίδιο προβλημα.

Δημοσ.

hint: όπως είναι ο κώδικας σου προϋπόθεση είναι το αρχείο που πας να γράψεις να υπάρχει...

Δημοσ.

δοκιμασε να αλλάξεις το filename του αρχείου , και επίσης υπάρχει περίπτωση να ξεπερνάς το όριο χαρακτήρων σε μια γραμμή, δοκίμασε στα writeln να βάλεις λιγότερο κείμενο.

Δημοσ.

hint: όπως είναι ο κώδικας σου προϋπόθεση είναι το αρχείο που πας να γράψεις να υπάρχει...

Υπάρχει το αρχείο

Και έχω ελέγξει τα ονόματα όλα και είναι σωστά

δοκιμασε να αλλάξεις το filename του αρχείου , και επίσης υπάρχει περίπτωση να ξεπερνάς το όριο χαρακτήρων σε μια γραμμή, δοκίμασε στα writeln να βάλεις λιγότερο κείμενο.

εχω δοκιμασει τα παντα 

πραγματικα δεν βγαζω ακρη

Δημοσ.

Άλλαξε compiler , πχ fpc, lazarus

Επίσης ψάξε στο documention της pascal για αυτό το error code

Επίσης δοκίμασε να αποθηκεύσεις τον κώδικα σε utf-8 , γιατί μπορεί να φταίνε τα ελληνικά , πρώτα απολα άλλαξε τα ελληνικά και αν φταίνε βαλε το utf-8

Δημοσ.

Αγαπητέ Dimitrsthras και το υπόλοιπο νήμα,

Αυτό το λάθος το βγάζει επειδή η εντολή append την οποίαν χρησιμοποιείς προϋποθέτει ότι το αρχείο που θέλουμε ν' ανοίξουμε υπάρχει ήδη. Έτσι όταν τρέχεις αυτό το πρόγραμμα, χωρίς να έχει εκ των προτέρων δημιουργηθεί το file.txt, ο υπολογιστής προσπαθεί ν' ανοίξει ένα αρχείο το οποίο δεν υπάρχει. Αυτή ακριβώς η κατάσταση παράγει το σφάλμα κατά το χρόνο εκτέλεσης του προγράμματος.
 Για να λυθεί το πρόβλημα, αρκεί να παρεμβάλουμε μια συνθήκη η οποία να έχει την εξής μορφή :

AN το αρχειό file.txt υπάρχει τότε άνοιξέ το για προσθήκη εγγραφών ΑΛΛΙΩΣ δημιούργησέ το εξ αρχής

Η Pascal διαθέτει τη συνάρτηση FileExists η οποία ελέγχει αν ένα δεδομένο αρχείο ήδη υπάρχει ή όχι. Δέχεται ως όρισμα εισόδου το όνομα του αρχείου σε αλφαριθμητική μορφή και επιστρέφει μία λογική τιμή (true ή false), ανάλογα με το αν θα εντοπίσει το αρχείο. Η συνάρτηση αυτή δεν ανήκει στον κορμό των εντολών της Pascal, αλλά στη μονάδα SysUtils. Άρα πριν απ' όλα, πάνω-πάνω στο πρόγραμμα απαιτείται η δήλωση :

Uses SysUtils ;

Για ν' ανοιξουμε το αρχείο για προσθήκες εγγραφών χρησιμοποιούμε την εντολή append. Άμα όμως η FileExists επιστρέψει ψευδή τιμή, τότε θα πρέπει να το δημιουργήσουμε εξ αρχής και γι' αυτό το σκοπό η σωστή εντολή είναι η rewrite.

Άρα η συνθήκη που λύνει το πρόβλημα έχει ως εξής :

IF FileExists('file.txt') THEN append(arxeio) ELSE rewrite)arxeio);

Υπάρχει κάτι ακόμα που το άφησα για το τέλος. Προτείνω ακόμα και η μεταβλητή kin να δηλωθεί σαν string, γιατί δεν είμαι απόλυτα βέβαιος άμα ο τύπος longint δέχεται δεκαψήφιους ακεραίους. Άμα αργότερα θέλουμε σώνει και καλά να μετατρέψουμε το αλφαριθμητικό kin σε αριθμητική τιμή, αρκεί η συνάρτηση val(kin).
Το πρόγραμμα το έτρεξα με τον Free Pascal Compiler σε περιβάλλον Linux, όπου όλα τα αλφαριθμητικά τα έχω ορίσει ως UTF8 κι έτρεξε κανονικά. Μου επέτρεψε να το τρέξω ξανά και ξανά και να κάνω πολλές προσθήκες εγγραφών στο file.txt.

Παρακάτω δίνω συνολικά το διορθωμένο κώδικα :

program iniz;

Uses Sysutils;

var arxeio:Text;
ono,ari:string;
kin:String;

begin
writeln ('Γράψε το ονοματεπώνυμό σου:');
readln (ono);
writeln ('Γράψε τον αριθμό κυκλοφορίας του οχήματος σου:');
readln (ari);
writeln('Γράψε το κινητό τηλέφωνο σου:');
readln(kin);
assign(arxeio,'file.txt');
if fileexists('file.txt') then append(arxeio) else rewrite(arxeio);
writeln (arxeio,ono);
writeln (arxeio,ari);
writeln (arxeio,kin);
writeln (ono);
writeln (ari);
writeln (kin);
close (arxeio);
end.

Καλή σας νύχτα,
Μ' ένα ζεστό νιαούρισμα,
Ο Άσπρος Γάτος
 

  • Like 2
Δημοσ.

αψογος ο ασπρος γατος 
πραγματικά βοήθησε παρα πολύ!

το ετρεξα στα windows με τον fpc compiler χωρις ομως να ορίσω όλα τα αλφαριθμητικά σε utf8
ευχαριστώ πολύ!

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...