File: assoc.sl

package info (click to toggle)
slang2 2.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 10,588 kB
  • ctags: 10,558
  • sloc: ansic: 95,506; sh: 3,277; makefile: 945; pascal: 143
file content (33 lines) | stat: -rw-r--r-- 1,073 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
% This example illustrates the use of associative arrays.
% The function 'analyse_file' counts the number of occurrences of each word
% in a specified file.  Once the file has been read in, it writes out
% the list of words and number of occurrences to the file counts.log

define analyse_file (file)
{
   variable fp = fopen (file, "r");
   if (fp == NULL)
     throw OpenError, "Unable to open $file"$;

   % Create an Integer_Type assoc array with default value of 0.
   variable a = Assoc_Type[Integer_Type, 0];

   variable line, word;
   while (-1 != fgets (&line, fp))
     {
	foreach word (strtok (strlow(line), "^\\w"))
	  a[word] = a[word] + 1;    %  default value of 0 assumed!!
     }
   () = fclose (fp);

   variable keys = assoc_get_keys (a);
   variable values = assoc_get_values (a);

   % The default array_sort for Int_Type is an ascending sort.  We want the
   % opposite.
   variable i = array_sort (values; dir=-1);

   fp = fopen ("count.log", "w");
   () = array_map (Int_Type, &fprintf, fp, "%s:\t%d\n", keys[i], values[i]);
   () = fclose (fp);
}