alf 0.9.3 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (270) hide show
  1. data/CHANGELOG.md +255 -129
  2. data/Gemfile +31 -1
  3. data/Gemfile.lock +17 -20
  4. data/LICENCE.md +1 -1
  5. data/Manifest.txt +2 -0
  6. data/README.md +37 -43
  7. data/TODO.md +1 -1
  8. data/alf.gemspec +10 -7
  9. data/alf.noespec +24 -13
  10. data/bin/alf +2 -2
  11. data/doc/commands/exec.md +16 -0
  12. data/doc/commands/help.md +11 -0
  13. data/doc/commands/main.md +33 -0
  14. data/doc/commands/show.md +19 -0
  15. data/doc/operators/non_relational/autonum.md +23 -0
  16. data/doc/operators/non_relational/clip.md +31 -0
  17. data/doc/operators/non_relational/coerce.md +15 -0
  18. data/doc/operators/non_relational/compact.md +20 -0
  19. data/doc/operators/non_relational/defaults.md +32 -0
  20. data/doc/operators/non_relational/generator.md +20 -0
  21. data/doc/operators/non_relational/sort.md +24 -0
  22. data/doc/operators/relational/extend.md +18 -0
  23. data/doc/operators/relational/group.md +27 -0
  24. data/doc/operators/relational/intersect.md +13 -0
  25. data/doc/operators/relational/join.md +27 -0
  26. data/doc/operators/relational/matching.md +20 -0
  27. data/doc/operators/relational/minus.md +12 -0
  28. data/doc/operators/relational/not-matching.md +20 -0
  29. data/doc/operators/relational/project.md +28 -0
  30. data/doc/operators/relational/quota.md +21 -0
  31. data/doc/operators/relational/rank.md +27 -0
  32. data/doc/operators/relational/rename.md +17 -0
  33. data/doc/operators/relational/restrict.md +25 -0
  34. data/doc/operators/relational/summarize.md +25 -0
  35. data/doc/operators/relational/ungroup.md +20 -0
  36. data/doc/operators/relational/union.md +14 -0
  37. data/doc/operators/relational/unwrap.md +20 -0
  38. data/doc/operators/relational/wrap.md +24 -0
  39. data/examples/csv/suppliers.csv +6 -0
  40. data/examples/logs/access.log +1000 -0
  41. data/examples/logs/combined.alf +2 -0
  42. data/examples/logs/hits.alf +14 -0
  43. data/examples/logs/not_found.alf +7 -0
  44. data/examples/logs/robots-cheating.alf +11 -0
  45. data/examples/logs/robots.alf +8 -0
  46. data/examples/northwind/customers.csv +92 -0
  47. data/examples/northwind/northwind.db +0 -0
  48. data/examples/northwind/orders.csv +831 -0
  49. data/examples/operators/clip.alf +1 -1
  50. data/examples/operators/database.alf +5 -6
  51. data/examples/operators/defaults.alf +1 -1
  52. data/examples/operators/group.alf +1 -1
  53. data/examples/operators/project.alf +2 -1
  54. data/examples/operators/pseudo-with.alf +2 -2
  55. data/examples/operators/quota.alf +2 -2
  56. data/examples/operators/summarize.alf +2 -2
  57. data/lib/alf/aggregator/aggregators.rb +77 -0
  58. data/lib/alf/aggregator/base.rb +95 -0
  59. data/lib/alf/aggregator/class_methods.rb +57 -0
  60. data/lib/alf/buffer/sorted.rb +48 -0
  61. data/lib/alf/command/class_methods.rb +27 -0
  62. data/lib/alf/command/doc_manager.rb +72 -0
  63. data/lib/alf/command/exec.rb +12 -0
  64. data/lib/alf/command/help.rb +31 -0
  65. data/lib/alf/command/main.rb +146 -0
  66. data/lib/alf/command/show.rb +33 -0
  67. data/lib/alf/environment/base.rb +37 -0
  68. data/lib/alf/environment/class_methods.rb +93 -0
  69. data/lib/alf/environment/explicit.rb +38 -0
  70. data/lib/alf/environment/folder.rb +62 -0
  71. data/lib/alf/extra/csv.rb +104 -0
  72. data/lib/alf/extra/logs.rb +100 -0
  73. data/lib/alf/extra/sequel.rb +77 -0
  74. data/lib/alf/{yaml.rb → extra/yaml.rb} +0 -0
  75. data/lib/alf/extra.rb +5 -0
  76. data/lib/alf/iterator/base.rb +38 -0
  77. data/lib/alf/iterator/class_methods.rb +22 -0
  78. data/lib/alf/iterator/proxy.rb +33 -0
  79. data/lib/alf/lispy/instance_methods.rb +157 -0
  80. data/lib/alf/operator/base.rb +74 -0
  81. data/lib/alf/operator/binary.rb +32 -0
  82. data/lib/alf/operator/cesure.rb +45 -0
  83. data/lib/alf/operator/class_methods.rb +132 -0
  84. data/lib/alf/operator/experimental.rb +9 -0
  85. data/lib/alf/operator/non_relational/autonum.rb +24 -0
  86. data/lib/alf/operator/non_relational/clip.rb +20 -0
  87. data/lib/alf/operator/non_relational/coerce.rb +21 -0
  88. data/lib/alf/operator/non_relational/compact.rb +62 -0
  89. data/lib/alf/operator/non_relational/defaults.rb +25 -0
  90. data/lib/alf/operator/non_relational/generator.rb +38 -0
  91. data/lib/alf/operator/non_relational/sort.rb +23 -0
  92. data/lib/alf/operator/nullary.rb +20 -0
  93. data/lib/alf/operator/relational/extend.rb +24 -0
  94. data/lib/alf/operator/relational/group.rb +32 -0
  95. data/lib/alf/operator/relational/intersect.rb +37 -0
  96. data/lib/alf/operator/relational/join.rb +106 -0
  97. data/lib/alf/operator/relational/matching.rb +45 -0
  98. data/lib/alf/operator/relational/minus.rb +37 -0
  99. data/lib/alf/operator/relational/not_matching.rb +45 -0
  100. data/lib/alf/operator/relational/project.rb +22 -0
  101. data/lib/alf/operator/relational/quota.rb +51 -0
  102. data/lib/alf/operator/relational/rank.rb +55 -0
  103. data/lib/alf/operator/relational/rename.rb +19 -0
  104. data/lib/alf/operator/relational/restrict.rb +20 -0
  105. data/lib/alf/operator/relational/summarize.rb +83 -0
  106. data/lib/alf/operator/relational/ungroup.rb +25 -0
  107. data/lib/alf/operator/relational/union.rb +32 -0
  108. data/lib/alf/operator/relational/unwrap.rb +21 -0
  109. data/lib/alf/operator/relational/wrap.rb +22 -0
  110. data/lib/alf/operator/shortcut.rb +53 -0
  111. data/lib/alf/operator/signature.rb +262 -0
  112. data/lib/alf/operator/transform.rb +27 -0
  113. data/lib/alf/operator/unary.rb +38 -0
  114. data/lib/alf/reader/alf_file.rb +24 -0
  115. data/lib/alf/reader/base.rb +119 -0
  116. data/lib/alf/reader/class_methods.rb +82 -0
  117. data/lib/alf/reader/rash.rb +28 -0
  118. data/lib/alf/relation/class_methods.rb +37 -0
  119. data/lib/alf/relation/instance_methods.rb +127 -0
  120. data/lib/alf/renderer/base.rb +72 -0
  121. data/lib/alf/renderer/class_methods.rb +58 -0
  122. data/lib/alf/renderer/rash.rb +19 -0
  123. data/lib/alf/{text.rb → renderer/text.rb} +1 -1
  124. data/lib/alf/tools/coerce.rb +14 -0
  125. data/lib/alf/tools/miscellaneous.rb +77 -0
  126. data/lib/alf/tools/to_lispy.rb +99 -0
  127. data/lib/alf/tools/to_ruby_literal.rb +14 -0
  128. data/lib/alf/tools/tuple_handle.rb +50 -0
  129. data/lib/alf/types/attr_list.rb +56 -0
  130. data/lib/alf/types/attr_name.rb +28 -0
  131. data/lib/alf/types/boolean.rb +12 -0
  132. data/lib/alf/types/heading.rb +96 -0
  133. data/lib/alf/types/ordering.rb +93 -0
  134. data/lib/alf/types/renaming.rb +57 -0
  135. data/lib/alf/types/summarization.rb +76 -0
  136. data/lib/alf/types/tuple_computation.rb +61 -0
  137. data/lib/alf/types/tuple_expression.rb +61 -0
  138. data/lib/alf/types/tuple_predicate.rb +49 -0
  139. data/lib/alf/version.rb +2 -2
  140. data/lib/alf.rb +193 -3714
  141. data/spec/integration/__database__/group.alf +1 -1
  142. data/spec/integration/__database__/suppliers_csv.csv +6 -0
  143. data/spec/integration/command/alf/alf.db +0 -0
  144. data/spec/integration/command/alf/alf_env_sqlite.cmd +1 -0
  145. data/spec/integration/command/alf/alf_env_sqlite.stdout +9 -0
  146. data/spec/integration/command/alf/alf_help.cmd +1 -0
  147. data/spec/integration/command/alf/alf_help.stdout +67 -0
  148. data/spec/integration/command/autonum/autonum_0.cmd +1 -1
  149. data/spec/integration/command/coerce/coerce_1.cmd +1 -0
  150. data/spec/integration/command/coerce/coerce_1.stdout +5 -0
  151. data/spec/integration/command/defaults/defaults_0.cmd +1 -1
  152. data/spec/integration/command/defaults/defaults_0.stdout +9 -9
  153. data/spec/integration/command/defaults/defaults_2.cmd +1 -0
  154. data/spec/integration/command/defaults/defaults_2.stdout +9 -0
  155. data/spec/integration/command/generator/generator_1.cmd +1 -0
  156. data/spec/integration/command/generator/generator_1.stdout +10 -0
  157. data/spec/integration/command/generator/generator_2.cmd +1 -0
  158. data/spec/integration/command/generator/generator_2.stdout +5 -0
  159. data/spec/integration/command/generator/generator_3.cmd +1 -0
  160. data/spec/integration/command/generator/generator_3.stdout +5 -0
  161. data/spec/integration/command/group/group_0.cmd +1 -1
  162. data/spec/integration/command/group/group_1.cmd +1 -1
  163. data/spec/integration/command/help/help_1.cmd +1 -0
  164. data/spec/integration/command/help/help_1.stdout +22 -0
  165. data/spec/integration/command/quota/quota_0.cmd +1 -1
  166. data/spec/integration/command/rank/rank_1.cmd +1 -1
  167. data/spec/integration/command/rank/rank_1.stdout +10 -10
  168. data/spec/integration/command/rank/rank_2.cmd +1 -1
  169. data/spec/integration/command/rank/rank_2.stdout +10 -10
  170. data/spec/integration/command/rank/rank_3.cmd +1 -1
  171. data/spec/integration/command/rank/rank_3.stdout +10 -10
  172. data/spec/integration/command/rank/rank_4.cmd +1 -1
  173. data/spec/integration/command/rank/rank_5.cmd +1 -1
  174. data/spec/integration/command/show/show_csv.cmd +1 -0
  175. data/spec/integration/command/show/show_csv.stdout +6 -0
  176. data/spec/integration/command/show/show_rash_2.cmd +1 -1
  177. data/spec/integration/command/show/show_rash_2.stdout +5 -5
  178. data/spec/integration/command/sort/sort_0.cmd +1 -1
  179. data/spec/integration/command/sort/sort_1.cmd +1 -1
  180. data/spec/integration/command/sort/sort_1.stdout +2 -2
  181. data/spec/integration/command/sort/sort_2.cmd +1 -0
  182. data/spec/integration/command/sort/sort_2.stdout +9 -0
  183. data/spec/integration/command/sort/sort_3.cmd +1 -0
  184. data/spec/integration/command/sort/sort_3.stdout +9 -0
  185. data/spec/integration/command/summarize/summarize_0.cmd +1 -1
  186. data/spec/integration/command/ungroup/ungroup_0.cmd +1 -1
  187. data/spec/integration/command/wrap/wrap_0.cmd +1 -1
  188. data/spec/integration/semantics/test_project.alf +5 -6
  189. data/spec/integration/semantics/test_rank.alf +16 -16
  190. data/spec/integration/test_command.rb +17 -6
  191. data/spec/integration/test_examples.rb +1 -1
  192. data/spec/regression/logs/apache_combined.log +5 -0
  193. data/spec/regression/logs/test_path_attribute.rb +25 -0
  194. data/spec/regression/relation/test_relation_allbut_all.rb +14 -0
  195. data/spec/shared/an_operator_class.rb +10 -5
  196. data/spec/spec_helper.rb +1 -7
  197. data/spec/unit/assumptions/test_set.rb +64 -0
  198. data/spec/unit/command/doc_manager/dynamic.md +1 -0
  199. data/spec/unit/command/doc_manager/example.md +1 -0
  200. data/spec/unit/command/doc_manager/example_1.txt +11 -0
  201. data/spec/unit/command/doc_manager/static.md +1 -0
  202. data/spec/unit/command/doc_manager/test_call.rb +49 -0
  203. data/spec/unit/csv/input.csv +3 -0
  204. data/spec/unit/csv/test_reader.rb +66 -0
  205. data/spec/unit/csv/test_renderer.rb +73 -0
  206. data/spec/unit/lispy/test_relation.rb +37 -0
  207. data/spec/unit/lispy/test_run.rb +40 -0
  208. data/spec/unit/lispy/test_tuple.rb +36 -0
  209. data/spec/unit/logs/apache_combined.log +5 -0
  210. data/spec/unit/logs/postgresql.log +29 -0
  211. data/spec/unit/logs/test_reader.rb +56 -0
  212. data/spec/unit/operator/non_relational/compact/{buffer_based.rb → test_buffer_based.rb} +0 -0
  213. data/spec/unit/operator/non_relational/test_clip.rb +1 -1
  214. data/spec/unit/operator/non_relational/test_coerce.rb +35 -0
  215. data/spec/unit/operator/non_relational/test_defaults.rb +15 -2
  216. data/spec/unit/operator/non_relational/test_generator.rb +78 -0
  217. data/spec/unit/operator/relational/join/test_hash_based.rb +4 -4
  218. data/spec/unit/operator/relational/matching/test_hash_based.rb +6 -6
  219. data/spec/unit/operator/relational/not_matching/test_hash_based.rb +4 -4
  220. data/spec/unit/operator/relational/summarize/test_hash_based.rb +10 -6
  221. data/spec/unit/operator/relational/summarize/test_sort_based.rb +18 -7
  222. data/spec/unit/operator/relational/test_group.rb +8 -8
  223. data/spec/unit/operator/relational/test_intersect.rb +3 -3
  224. data/spec/unit/operator/relational/test_minus.rb +3 -3
  225. data/spec/unit/operator/relational/test_project.rb +12 -2
  226. data/spec/unit/operator/relational/test_quota.rb +5 -6
  227. data/spec/unit/operator/relational/test_summarize.rb +9 -11
  228. data/spec/unit/operator/relational/test_union.rb +1 -1
  229. data/spec/unit/operator/relational/test_wrap.rb +1 -1
  230. data/spec/unit/operator/signature/test_collect_on.rb +45 -0
  231. data/spec/unit/operator/signature/test_initialize.rb +17 -0
  232. data/spec/unit/operator/signature/test_install.rb +56 -0
  233. data/spec/unit/operator/signature/test_option_parser.rb +36 -0
  234. data/spec/unit/operator/signature/test_parse_args.rb +60 -0
  235. data/spec/unit/operator/signature/test_parse_argv.rb +87 -0
  236. data/spec/unit/operator/signature/test_to_lispy.rb +102 -0
  237. data/spec/unit/operator/signature/test_to_shell.rb +103 -0
  238. data/spec/unit/operator/test_non_relational.rb +3 -1
  239. data/spec/unit/relation/test_relops.rb +20 -15
  240. data/spec/unit/sequel/alf.db +0 -0
  241. data/spec/unit/sequel/test_environment.rb +54 -0
  242. data/spec/unit/test_aggregator.rb +32 -22
  243. data/spec/unit/test_environment.rb +5 -0
  244. data/spec/unit/test_lispy.rb +4 -0
  245. data/spec/unit/test_relation.rb +5 -0
  246. data/spec/unit/text/test_cell.rb +6 -6
  247. data/spec/unit/text/test_row.rb +3 -3
  248. data/spec/unit/text/test_table.rb +6 -6
  249. data/spec/unit/tools/test_coalesce.rb +15 -0
  250. data/spec/unit/tools/test_coerce.rb +10 -0
  251. data/spec/unit/tools/test_to_lispy.rb +138 -0
  252. data/spec/unit/tools/test_to_ruby_literal.rb +10 -0
  253. data/spec/unit/tools/test_tuple_handle.rb +1 -59
  254. data/spec/unit/types/test_attr_list.rb +106 -0
  255. data/spec/unit/types/test_attr_name.rb +52 -0
  256. data/spec/unit/{test_heading.rb → types/test_heading.rb} +10 -0
  257. data/spec/unit/types/test_ordering.rb +127 -0
  258. data/spec/unit/types/test_renaming.rb +55 -0
  259. data/spec/unit/types/test_summarization.rb +63 -0
  260. data/spec/unit/types/test_tuple_computation.rb +60 -0
  261. data/spec/unit/types/test_tuple_expression.rb +64 -0
  262. data/spec/unit/types/test_tuple_predicate.rb +79 -0
  263. data/tasks/debug_mail.rake +1 -1
  264. data/tasks/debug_mail.txt +5 -0
  265. data/tasks/gh-pages.rake +63 -0
  266. metadata +325 -52
  267. data/spec/unit/operator/test_command_methods.rb +0 -38
  268. data/spec/unit/tools/test_ordering_key.rb +0 -94
  269. data/spec/unit/tools/test_parse_commandline_args.rb +0 -47
  270. data/spec/unit/tools/test_projection_key.rb +0 -83
@@ -0,0 +1,2 @@
1
+ path = File.join(File.dirname(__FILE__), "access.log")
2
+ Alf::Reader.reader(path, :file_format => [:apache, :combined])
@@ -0,0 +1,14 @@
1
+ #
2
+ # Give, for each page (path), the number of successfully (http status = 200)
3
+ # served requests. Take only non robot requests into account.
4
+ #
5
+ # Use the following invocation to have them sorted by hit number:
6
+ #
7
+ # alf --text --env=examples/logs sort hits -- hits asc
8
+ #
9
+ (summarize \
10
+ (restrict :combined,
11
+ lambda{ (http_status == 200) and
12
+ not(user_agent =~ /[Bb]ot/ or path =~ /robots.txt/) }),
13
+ [:path],
14
+ :hits => count())
@@ -0,0 +1,7 @@
1
+ #
2
+ # Give all paths (together with http method and version) for which a 404 not
3
+ # found has been responded by the server.
4
+ #
5
+ (project \
6
+ (restrict :combined, lambda{ http_status == 404 }),
7
+ [:path, :http_method, :http_version])
@@ -0,0 +1,11 @@
1
+ #
2
+ # Given that robots include (see robots.alf):
3
+ # - those whose name matches /[Bb]ot/
4
+ # - those who request robots.txt
5
+ #
6
+ # Who are cheaters, that is, those who request robots.txt but are not
7
+ # named /[Bb]ot/ ?
8
+ #
9
+ (minus \
10
+ (project (restrict :combined, lambda{ path =~ /robots.txt/ }), [:user_agent]),
11
+ (project (restrict :combined, lambda{ user_agent =~ /[Bb]ot/ }), [:user_agent]))
@@ -0,0 +1,8 @@
1
+ #
2
+ # Give the names of user agent that look like robots. This includes:
3
+ # - those whose name matches /[Bb]ot/
4
+ # - those who request robots.txt
5
+ #
6
+ (project \
7
+ (restrict :combined, lambda{ user_agent =~ /[Bb]ot/ or path =~ /robots.txt/ }),
8
+ [:user_agent])
@@ -0,0 +1,92 @@
1
+ CustomerID,CompanyName,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax
2
+ ALFKI,"Alfreds Futterkiste","Maria Anders","Sales Representative","Obere Str. 57",Berlin,,12209,Germany,030-0074321,030-0076545
3
+ ANATR,"Ana Trujillo Emparedados y helados","Ana Trujillo",Owner,"Avda. de la Constitución 2222","México D.F.",,05021,Mexico,"(5) 555-4729","(5) 555-3745"
4
+ ANTON,"Antonio Moreno Taquería","Antonio Moreno",Owner,"Mataderos 2312","México D.F.",,05023,Mexico,"(5) 555-3932",
5
+ AROUT,"Around the Horn","Thomas Hardy","Sales Representative","120 Hanover Sq.",London,,"WA1 1DP",UK,"(171) 555-7788","(171) 555-6750"
6
+ BERGS,"Berglunds snabbköp","Christina Berglund","Order Administrator","Berguvsvägen 8","Luleå",,"S-958 22",Sweden,"0921-12 34 65","0921-12 34 67"
7
+ BLAUS,"Blauer See Delikatessen","Hanna Moos","Sales Representative","Forsterstr. 57",Mannheim,,68306,Germany,0621-08460,0621-08924
8
+ BLONP,"Blondesddsl père et fils","Frédérique Citeaux","Marketing Manager","24, place Kléber",Strasbourg,,67000,France,88.60.15.31,88.60.15.32
9
+ BOLID,"Bólido Comidas preparadas","Martín Sommer",Owner,"C/ Araquil, 67",Madrid,,28023,Spain,"(91) 555 22 82","(91) 555 91 99"
10
+ BONAP,"Bon app'","Laurence Lebihan",Owner,"12, rue des Bouchers",Marseille,,13008,France,91.24.45.40,91.24.45.41
11
+ BOTTM,"Bottom-Dollar Markets","Elizabeth Lincoln","Accounting Manager","23 Tsawassen Blvd.",Tsawassen,BC,"T2F 8M4",Canada,"(604) 555-4729","(604) 555-3745"
12
+ BSBEV,"B's Beverages","Victoria Ashworth","Sales Representative","Fauntleroy Circus",London,,"EC2 5NT",UK,"(171) 555-1212",
13
+ CACTU,"Cactus Comidas para llevar","Patricio Simpson","Sales Agent","Cerrito 333","Buenos Aires",,1010,Argentina,"(1) 135-5555","(1) 135-4892"
14
+ CENTC,"Centro comercial Moctezuma","Francisco Chang","Marketing Manager","Sierras de Granada 9993","México D.F.",,05022,Mexico,"(5) 555-3392","(5) 555-7293"
15
+ CHOPS,"Chop-suey Chinese","Yang Wang",Owner,"Hauptstr. 29",Bern,,3012,Switzerland,0452-076545,
16
+ COMMI,"Comércio Mineiro","Pedro Afonso","Sales Associate","Av. dos Lusíadas, 23","Sao Paulo",SP,05432-043,Brazil,"(11) 555-7647",
17
+ CONSH,"Consolidated Holdings","Elizabeth Brown","Sales Representative","Berkeley Gardens 12 Brewery",London,,"WX1 6LT",UK,"(171) 555-2282","(171) 555-9199"
18
+ DRACD,"Drachenblut Delikatessen","Sven Ottlieb","Order Administrator","Walserweg 21",Aachen,,52066,Germany,0241-039123,0241-059428
19
+ DUMON,"Du monde entier","Janine Labrune",Owner,"67, rue des Cinquante Otages",Nantes,,44000,France,40.67.88.88,40.67.89.89
20
+ EASTC,"Eastern Connection","Ann Devon","Sales Agent","35 King George",London,,"WX3 6FW",UK,"(171) 555-0297","(171) 555-3373"
21
+ ERNSH,"Ernst Handel","Roland Mendel","Sales Manager","Kirchgasse 6",Graz,,8010,Austria,7675-3425,7675-3426
22
+ FAMIA,"Familia Arquibaldo","Aria Cruz","Marketing Assistant","Rua Orós, 92","Sao Paulo",SP,05442-030,Brazil,"(11) 555-9857",
23
+ FISSA,"FISSA Fabrica Inter. Salchichas S.A.","Diego Roel","Accounting Manager","C/ Moralzarzal, 86",Madrid,,28034,Spain,"(91) 555 94 44","(91) 555 55 93"
24
+ FOLIG,"Folies gourmandes","Martine Rancé","Assistant Sales Agent","184, chaussée de Tournai",Lille,,59000,France,20.16.10.16,20.16.10.17
25
+ FOLKO,"Folk och fä HB","Maria Larsson",Owner,"Åkergatan 24","Bräcke",,"S-844 67",Sweden,"0695-34 67 21",
26
+ FRANK,Frankenversand,"Peter Franken","Marketing Manager","Berliner Platz 43","München",,80805,Germany,089-0877310,089-0877451
27
+ FRANR,"France restauration","Carine Schmitt","Marketing Manager","54, rue Royale",Nantes,,44000,France,40.32.21.21,40.32.21.20
28
+ FRANS,"Franchi S.p.A.","Paolo Accorti","Sales Representative","Via Monte Bianco 34",Torino,,10100,Italy,011-4988260,011-4988261
29
+ FURIB,"Furia Bacalhau e Frutos do Mar","Lino Rodriguez","Sales Manager","Jardim das rosas n. 32",Lisboa,,1675,Portugal,"(1) 354-2534","(1) 354-2535"
30
+ GALED,"Galería del gastrónomo","Eduardo Saavedra","Marketing Manager","Rambla de Cataluña, 23",Barcelona,,08022,Spain,"(93) 203 4560","(93) 203 4561"
31
+ GODOS,"Godos Cocina Típica","José Pedro Freyre","Sales Manager","C/ Romero, 33",Sevilla,,41101,Spain,"(95) 555 82 82",
32
+ GOURL,"Gourmet Lanchonetes","André Fonseca","Sales Associate","Av. Brasil, 442",Campinas,SP,04876-786,Brazil,"(11) 555-9482",
33
+ GREAL,"Great Lakes Food Market","Howard Snyder","Marketing Manager","2732 Baker Blvd.",Eugene,OR,97403,USA,"(503) 555-7555",
34
+ GROSR,GROSELLA-Restaurante,"Manuel Pereira",Owner,"5ª Ave. Los Palos Grandes",Caracas,DF,1081,Venezuela,"(2) 283-2951","(2) 283-3397"
35
+ HANAR,"Hanari Carnes","Mario Pontes","Accounting Manager","Rua do Paço, 67","Rio de Janeiro",RJ,05454-876,Brazil,"(21) 555-0091","(21) 555-8765"
36
+ HILAA,HILARION-Abastos,"Carlos Hernández","Sales Representative","Carrera 22 con Ave. Carlos Soublette #8-35","San Cristóbal","Táchira",5022,Venezuela,"(5) 555-1340","(5) 555-1948"
37
+ HUNGC,"Hungry Coyote Import Store","Yoshi Latimer","Sales Representative","City Center Plaza 516 Main St.",Elgin,OR,97827,USA,"(503) 555-6874","(503) 555-2376"
38
+ HUNGO,"Hungry Owl All-Night Grocers","Patricia McKenna","Sales Associate","8 Johnstown Road",Cork,"Co. Cork",,Ireland,"2967 542","2967 3333"
39
+ ISLAT,"Island Trading","Helen Bennett","Marketing Manager","Garden House Crowther Way",Cowes,"Isle of Wight","PO31 7PJ",UK,"(198) 555-8888",
40
+ KOENE,"Königlich Essen","Philip Cramer","Sales Associate","Maubelstr. 90",Brandenburg,,14776,Germany,0555-09876,
41
+ LACOR,"La corne d'abondance","Daniel Tonini","Sales Representative","67, avenue de l'Europe",Versailles,,78000,France,30.59.84.10,30.59.85.11
42
+ LAMAI,"La maison d'Asie","Annette Roulet","Sales Manager","1 rue Alsace-Lorraine",Toulouse,,31000,France,61.77.61.10,61.77.61.11
43
+ LAUGB,"Laughing Bacchus Wine Cellars","Yoshi Tannamuri","Marketing Assistant","1900 Oak St.",Vancouver,BC,"V3F 2K1",Canada,"(604) 555-3392","(604) 555-7293"
44
+ LAZYK,"Lazy K Kountry Store","John Steel","Marketing Manager","12 Orchestra Terrace","Walla Walla",WA,99362,USA,"(509) 555-7969","(509) 555-6221"
45
+ LEHMS,"Lehmanns Marktstand","Renate Messner","Sales Representative","Magazinweg 7","Frankfurt a.M.",,60528,Germany,069-0245984,069-0245874
46
+ LETSS,"Let's Stop N Shop","Jaime Yorres",Owner,"87 Polk St. Suite 5","San Francisco",CA,94117,USA,"(415) 555-5938",
47
+ LILAS,LILA-Supermercado,"Carlos González","Accounting Manager","Carrera 52 con Ave. Bolívar #65-98 Llano Largo",Barquisimeto,Lara,3508,Venezuela,"(9) 331-6954","(9) 331-7256"
48
+ LINOD,LINO-Delicateses,"Felipe Izquierdo",Owner,"Ave. 5 de Mayo Porlamar","I. de Margarita","Nueva Esparta",4980,Venezuela,"(8) 34-56-12","(8) 34-93-93"
49
+ LONEP,"Lonesome Pine Restaurant","Fran Wilson","Sales Manager","89 Chiaroscuro Rd.",Portland,OR,97219,USA,"(503) 555-9573","(503) 555-9646"
50
+ MAGAA,"Magazzini Alimentari Riuniti","Giovanni Rovelli","Marketing Manager","Via Ludovico il Moro 22",Bergamo,,24100,Italy,035-640230,035-640231
51
+ MAISD,"Maison Dewey","Catherine Dewey","Sales Agent","Rue Joseph-Bens 532",Bruxelles,,B-1180,Belgium,"(02) 201 24 67","(02) 201 24 68"
52
+ MEREP,"Mère Paillarde","Jean Fresnière","Marketing Assistant","43 rue St. Laurent","Montréal","Québec","H1J 1C3",Canada,"(514) 555-8054","(514) 555-8055"
53
+ MORGK,"Morgenstern Gesundkost","Alexander Feuer","Marketing Assistant","Heerstr. 22",Leipzig,,04179,Germany,0342-023176,
54
+ NORTS,North/South,"Simon Crowther","Sales Associate","South House 300 Queensbridge",London,,"SW7 1RZ",UK,"(171) 555-7733","(171) 555-2530"
55
+ OCEAN,"Océano Atlántico Ltda.","Yvonne Moncada","Sales Agent","Ing. Gustavo Moncada 8585 Piso 20-A","Buenos Aires",,1010,Argentina,"(1) 135-5333","(1) 135-5535"
56
+ OLDWO,"Old World Delicatessen","Rene Phillips","Sales Representative","2743 Bering St.",Anchorage,AK,99508,USA,"(907) 555-7584","(907) 555-2880"
57
+ OTTIK,"Ottilies Käseladen","Henriette Pfalzheim",Owner,"Mehrheimerstr. 369","Köln",,50739,Germany,0221-0644327,0221-0765721
58
+ PARIS,"Paris spécialités","Marie Bertrand",Owner,"265, boulevard Charonne",Paris,,75012,France,"(1) 42.34.22.66","(1) 42.34.22.77"
59
+ PERIC,"Pericles Comidas clásicas","Guillermo Fernández","Sales Representative","Calle Dr. Jorge Cash 321","México D.F.",,05033,Mexico,"(5) 552-3745","(5) 545-3745"
60
+ PICCO,"Piccolo und mehr","Georg Pipps","Sales Manager","Geislweg 14",Salzburg,,5020,Austria,6562-9722,6562-9723
61
+ PRINI,"Princesa Isabel Vinhos","Isabel de Castro","Sales Representative","Estrada da saúde n. 58",Lisboa,,1756,Portugal,"(1) 356-5634",
62
+ QUEDE,"Que Delícia","Bernardo Batista","Accounting Manager","Rua da Panificadora, 12","Rio de Janeiro",RJ,02389-673,Brazil,"(21) 555-4252","(21) 555-4545"
63
+ QUEEN,"Queen Cozinha","Lúcia Carvalho","Marketing Assistant","Alameda dos Canàrios, 891","Sao Paulo",SP,05487-020,Brazil,"(11) 555-1189",
64
+ QUICK,QUICK-Stop,"Horst Kloss","Accounting Manager","Taucherstraße 10",Cunewalde,,01307,Germany,0372-035188,
65
+ RANCH,"Rancho grande","Sergio Gutiérrez","Sales Representative","Av. del Libertador 900","Buenos Aires",,1010,Argentina,"(1) 123-5555","(1) 123-5556"
66
+ RATTC,"Rattlesnake Canyon Grocery","Paula Wilson","Assistant Sales Representative","2817 Milton Dr.",Albuquerque,NM,87110,USA,"(505) 555-5939","(505) 555-3620"
67
+ REGGC,"Reggiani Caseifici","Maurizio Moroni","Sales Associate","Strada Provinciale 124","Reggio Emilia",,42100,Italy,0522-556721,0522-556722
68
+ RICAR,"Ricardo Adocicados","Janete Limeira","Assistant Sales Agent","Av. Copacabana, 267","Rio de Janeiro",RJ,02389-890,Brazil,"(21) 555-3412",
69
+ RICSU,"Richter Supermarkt","Michael Holz","Sales Manager","Grenzacherweg 237","Genève",,1203,Switzerland,0897-034214,
70
+ ROMEY,"Romero y tomillo","Alejandra Camino","Accounting Manager","Gran Vía, 1",Madrid,,28001,Spain,"(91) 745 6200","(91) 745 6210"
71
+ SANTG,"Santé Gourmet","Jonas Bergulfsen",Owner,"Erling Skakkes gate 78",Stavern,,4110,Norway,"07-98 92 35","07-98 92 47"
72
+ SAVEA,"Save-a-lot Markets","Jose Pavarotti","Sales Representative","187 Suffolk Ln.",Boise,ID,83720,USA,"(208) 555-8097",
73
+ SEVES,"Seven Seas Imports","Hari Kumar","Sales Manager","90 Wadhurst Rd.",London,,"OX15 4NB",UK,"(171) 555-1717","(171) 555-5646"
74
+ SIMOB,"Simons bistro","Jytte Petersen",Owner,"Vinbæltet 34",Kobenhavn,,1734,Denmark,"31 12 34 56","31 13 35 57"
75
+ SPECD,"Spécialités du monde","Dominique Perrier","Marketing Manager","25, rue Lauriston",Paris,,75016,France,"(1) 47.55.60.10","(1) 47.55.60.20"
76
+ SPLIR,"Split Rail Beer & Ale","Art Braunschweiger","Sales Manager","P.O. Box 555",Lander,WY,82520,USA,"(307) 555-4680","(307) 555-6525"
77
+ SUPRD,"Suprêmes délices","Pascale Cartrain","Accounting Manager","Boulevard Tirou, 255",Charleroi,,B-6000,Belgium,"(071) 23 67 22 20","(071) 23 67 22 21"
78
+ THEBI,"The Big Cheese","Liz Nixon","Marketing Manager","89 Jefferson Way Suite 2",Portland,OR,97201,USA,"(503) 555-3612",
79
+ THECR,"The Cracker Box","Liu Wong","Marketing Assistant","55 Grizzly Peak Rd.",Butte,MT,59801,USA,"(406) 555-5834","(406) 555-8083"
80
+ TOMSP,"Toms Spezialitäten","Karin Josephs","Marketing Manager","Luisenstr. 48","Münster",,44087,Germany,0251-031259,0251-035695
81
+ TORTU,"Tortuga Restaurante","Miguel Angel Paolino",Owner,"Avda. Azteca 123","México D.F.",,05033,Mexico,"(5) 555-2933",
82
+ TRADH,"Tradição Hipermercados","Anabela Domingues","Sales Representative","Av. Inês de Castro, 414","Sao Paulo",SP,05634-030,Brazil,"(11) 555-2167","(11) 555-2168"
83
+ TRAIH,"Trail's Head Gourmet Provisioners","Helvetius Nagy","Sales Associate","722 DaVinci Blvd.",Kirkland,WA,98034,USA,"(206) 555-8257","(206) 555-2174"
84
+ VAFFE,Vaffeljernet,"Palle Ibsen","Sales Manager","Smagsloget 45","Århus",,8200,Denmark,"86 21 32 43","86 22 33 44"
85
+ VICTE,"Victuailles en stock","Mary Saveley","Sales Agent","2, rue du Commerce",Lyon,,69004,France,78.32.54.86,78.32.54.87
86
+ VINET,"Vins et alcools Chevalier","Paul Henriot","Accounting Manager","59 rue de l'Abbaye",Reims,,51100,France,26.47.15.10,26.47.15.11
87
+ WANDK,"Die Wandernde Kuh","Rita Müller","Sales Representative","Adenauerallee 900",Stuttgart,,70563,Germany,0711-020361,0711-035428
88
+ WARTH,"Wartian Herkku","Pirkko Koskitalo","Accounting Manager","Torikatu 38",Oulu,,90110,Finland,981-443655,981-443655
89
+ WELLI,"Wellington Importadora","Paula Parente","Sales Manager","Rua do Mercado, 12",Resende,SP,08737-363,Brazil,"(14) 555-8122",
90
+ WHITC,"White Clover Markets","Karl Jablonski",Owner,"305 - 14th Ave. S. Suite 3B",Seattle,WA,98128,USA,"(206) 555-4112","(206) 555-4115"
91
+ WILMK,"Wilman Kala","Matti Karttunen","Owner/Marketing Assistant","Keskuskatu 45",Helsinki,,21240,Finland,"90-224 8858","90-224 8858"
92
+ WOLZA,"Wolski Zajazd","Zbyszek Piestrzeniewicz",Owner,"ul. Filtrowa 68",Warszawa,,01-012,Poland,"(26) 642-7012","(26) 642-7012"
Binary file