background image

Κεφάλαιο 3 - Ανάπτυξη και Υλοποίηση της Εφαρμογής 
 

 

 

62 

 

1. 

 $handle

 

=

 

fopen

(

$vcd_file

,

 

"r"

);

 

2. 

 if

(

$handle

){

 

3. 

   while

 

((

$line

 

=

 

fgets

(

$handle

))

 

!==

 

false

)

 

{

 

4. 

    // if the line is timescale definition, keep it to the time infor-

mation

 

5. 

    if

(

  

preg_match

(

'/^  1 .*/'

,

$line

)

 

===

 

1

){

 

6. 

      // trim unnecessary parts and keep the timescale units

 

7. 

      $timescale

 

=

 

trim

(

str_replace

(

'1'

,

""

,

$line

));

 

8. 

    }

 

9.  
10. 

   // if the line is module definition, add that module to the path

 

11. 

   if

(

  

preg_match

(

'/^\$scope module .*/'

,

$line

)

 

===

 

1

){

 

12. 

     // trim unnecessary parts and keep the module's name

 

13. 

     $line

 

=

 

str_replace

(

'$scope module '

,

""

,

$line

);

 

14. 

     $module

 

.=

 

"_-_"

.

trim

(

str_replace

(

' $end'

,

""

,

$line

));

 

15. 

   }

 

 

Κώδικας 29: ajax_handler.php - Κομμάτι κώδικα εξαγωγής δεδομένων από το VCD αρχείο 

Η μετάφραση των αποτελεσμάτων παίρνει αρχικά την μορφή ενός πίνακα όπου συγκρατούμε 
για το κάθε σήμα την ονομασία του, το μήκος του, την οντότητα στην οποία ανήκει και τους 
χρόνους  στους  οποίους  αλλάζει  τιμή  καθώς  και  την  τιμή  που  παίρνει.  Εκτός  αυτών, 
συγκρατούμε  και  κάποια  στοιχεία  της  ίδιας  της  προσομοίωσης  όπως  τον  συνολικό  χρόνο 
προσομοίωσης, τον αριθμό χρόνων όπου υπάρχει τουλάχιστον μία αλλαγή τιμής καθώς και την 
χρονική υποδιαίρεση που χρησιμοποιείται στους χρόνους που μας δίνονται. Η διαδικασία αυτή 
γίνεται εξετάζοντας κάθε γραμμή του αρχείου VCD και συγκρίνοντάς την με συγκεκριμένες 
αναμενόμενες  μορφές  που  αντιστοιχούν  σε  δηλώσεις  δεδομένων  που  μας  ενδιαφέρουν 
(Κώδικας  29).  Καθώς  η  σύνθεση  του  πίνακα  αυτού  μπορεί  να  είναι  σχετικά  χρονοβόρα 
φτάνοντας  στα  μερικά  δευτερόλεπτα  για  πολύ  μεγάλα  αρχεία  VCD,  χρησιμοποιούμε  ένα 
ενδιάμεσο  αρχείο  τύπου  JSON  (JavaScript  Object  Notation,  Συμβολισμός  Αντικειμένου 
JavaScript) [28]. Στο αρχείο αυτό συγκρατούμε τον πίνακα με τα αποτελέσματα προσομοίωσης 
σε μορφή JSON. Έτσι μπορούμε αρχικά να ελέγξουμε εάν υπάρχει αλλαγή στο αρχείο VCD 
από την τελευταία του μετάφραση και εάν δεν υπάρχει κάποια αλλαγή να πάρουμε απευθείας 
τα δεδομένα που χρειαζόμαστε από το ενδιάμεσο αρχείο JSON.  

1. 

$vcd_timestamp

 

=

 

$path

.

filemtime

(

$vcd_file

);

 

2. 

[...]

 

3. 

if

(

file_exists

(

$vcd_timestamp

.

'.json'

)

 

){

 

4. 

  [...]

 

5. 

}

else

{

 

6. 

  [...]

 

7. 

  $fp

 

=

 

fopen

(

$vcd_timestamp

.

'.json'

,

 

'w'

)

 

or

 

die

(

"Unable to open 

file!"

);

 

8. 

  fwrite

(

$fp

,

 

json_encode

(

$data

));

 

9. 

  fclose

(

$fp

);

 

 

Κώδικας 30: ajax_handler.php - Ο έλεγχος και δημιουργία του ενδιάμεσου αρχείου JSON 

Ο  έλεγχος  αυτός  επιτυγχάνεται  με  την  χρήση  της  PHP  συνάρτησης  filemtime()  η  οποία 
επιστρέφει τον χρόνο στον οποίο έγινε η τελευταία αλλαγή σε ένα αρχείο. Κατά την δημιουργία 
του  ενδιάμεσου  αρχείου  JSON  παίρνουμε  τον  χρόνο  αυτό  για  το  αντίστοιχο  VCD  και  τον 
χρησιμοποιήσουμε  ως  ονομασία  του  JSON  αρχείου.  Έτσι,  στην  επόμενη  εκτέλεση  θα 
ξαναπάρουμε τον χρόνο τελευταίας αλλαγής του VCD αρχείου και θα ελέγξουμε αρχικά εάν 
υπάρχει  διαθέσιμο  JSON  αρχείο  με  ονομασία  τον  χρόνο  που  ζητάμε  οπότε    προχωράμε