海子铁路网

 找回密码
 注册进站

QQ登录

只需一步,快速开始

查看: 2001|回复: 7

关于拙作《LGuo的电子运行图》

[复制链接]
发表于 2009-2-23 13:36:20 | |阅读模式
因奔忙于生活,本人拙作《LGuo的电子运行图》自2007年4月17日发布“六提数据版”(2.40版)以后便一直没有发布后续版本。期间有不少车迷朋友关心新版本、特别是新数据的更新,在此我说明一下:

1. 这个小软件是我业余时间开发的,开发之初并没有考虑到后续公开源码、分工维护等方面的问题,为了赶进度,代码风格方面没有太注意,大多数地方也都没写注释。完整的源码我给过上海交大的Colin网友(是100多M的完整的开发目录,包括我后来移植的一个C#版本的半成品),achen1网友手上也有一套源码(具体哪个版本我忘记了)。如果有谁能够提供稳定的空间的话我可以把源码放上去共享,如果有人愿意并有能力维护的话我会非常高兴,否则什么时候会有新版本发布我实在无法确定。

2. 软件功能方面的维护可能难度比较大,如果有谁愿意为这个小软件更新数据造福广大网友的话我也会很高兴,在此公布一下数据格式:

一、线路表用的两个文件:
1 exl.eda 线路表,每行一条线路  
  第一位:拼音首位
  第二位:序号(经过1位编码),拼音首位相同的线路顺序编号
  后续:线路中文名
2 elc.eda 里程表,每行一个车站
  第一、二位:所属线路号(既线路表exl.eda里的第一、二位)
  第三位:车站等级(特等站为0)
  第四、五位:里程(经过2位编码)
  后续:车站中文名  

二、时刻表用的三个文件:
1 ezm.eda 站名表,每行一个车站,所有办客车站。时刻表里的车站用这个文件中的序号。
2 ecc.eda 车次表,每行一个车次,所有车次。时刻表里的车次用这个文件中的序号。
3 etrc.eda 时刻表,每8个字节一条数据
  第一、二位:车次序号(车次在ecc.eda中的顺序号,经过2位编码)
  第三、四位:车站序号(车站在ezm.eda中的顺序号,经过2位编码)
  第五位:到达小时数(经过1位编码)
  第六位:到达分钟数(经过1位编码)
  第七位:发车小时数(经过1位编码)
  第八位:发车分钟数(经过1位编码)

三、数值编解码Java源码,用于数值的压缩存储。是Base64的"变种"(有没有"变"忘记了,反正原来是准备变的)

  1. public static char[] codeTable = {
  2.                 '0', '1', '2', '3', '4', '5', '6', '7',
  3.                 '8', '9', 'a', 'b', 'c', 'd', 'e', 'f',
  4.                 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
  5.                 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
  6.                 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
  7.                 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
  8.                 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
  9.                 'U', 'V', 'W', 'X', 'Y', 'Z', '.', ' ',
  10. };

  11. //解码,字符到数值
  12. public static int decode(char c) {
  13.         for(int i=0; i<codeTable.length; i++)
  14.                 if(codeTable[i] == c)
  15.                         return i;

  16.         return 0;
  17. }

  18. //一位编码(用于时、分、站序的数值)
  19. public static String encode1(int num) {
  20.         return "" + codeTable[num];
  21. }

  22. //两位编码(用于编号、里程等数值)
  23. public static String encode2(int num) {
  24.         if(num >= 64*64)
  25.                 return "##";
  26.        
  27.         int num1 = num / 64;
  28.         int num2 = num % 64;
  29.        
  30.         return "" + codeTable[num1] + codeTable[num2];
  31. }
复制代码
 楼主| 发表于 2009-2-23 13:58:03 |
发一个C#版本的半成品,这个不需要装Java虚拟机了,本来以为运行效率会提高,但结果不是很满意。里面带的数据应该是去年7 8月份的,比原来发布的Java版的要新一些

Release.part1.rar

292.97 KB, 下载次数: 599

Release.part2.rar

235.68 KB, 下载次数: 532

发表于 2009-2-27 20:52:39 |
虽然看不懂,但是知道那是个好东西,支持!
发表于 2009-2-28 13:33:03 |
出现错误的
QQ截图未命名.jpg
发表于 2009-3-9 12:06:55 |
能不能把自带的时刻表更新一下,手动写车次信息太累了
发表于 2009-3-23 13:03:10 |
我1月份的时候想自己从头写个运行图软件,原因是:

- 2.40版有严重的性能问题,运行一会儿就会半死不活
- ETRC不是开源的,无法自己修改
- 我主要用Linux环境,ETRC虽然是Java写的,但目前版本并不能跨平台运行

于是在Google Code上创建了一个项目,准备自己重写,计划中是用C++和GTK+来做,不过刚刚开始就由于时间原因搁浅了。而且更重要的原因是那时我找到ETRC 2.41的版本,这个版本的已经解决了性能问题,用起来也很流畅,所以从头造轮子做开发的动力也就没有了。ETRC写到现在也已经很不容易了,自己从头做其实是很不值得的事情。

如果LGuo愿意以GPL或BSD之类的自由软件协议来开放源代码的话,可以考虑到Google Code或SourceForge上建一个项目,这样协作起来也会比较方便。我在Google Code上的项目名字叫train-graph,如果愿意可以考虑直接整合到这个项目里,我把以前的计划改掉,直接维护目前Java或C#的版本。我个人没有Java开发经验,不过C#还可以搞搞的,用过几年.NET 1.1。

有关数据,我在做train-graph时用VC 2005写过一个基于Windows SDK的小程序,可以直接从smskb中用暴力的手段(模拟用户键盘输入)提取出所有的数据,生成ETRC可以用的格式,直接导入使用。

代码在这里
http://code.google.com/p/train-g ... BConverter/main.cpp

代码写得奇丑无比,不过至少基本能工作了。

我计划等4/1调图以后的时刻表出来以后再抓取一次时刻数据提供给大家使用。
发表于 2009-3-23 13:15:31 |
试了一下C#版的,启动就出错,抛异常:

System.TypeInitializationException was unhandled
Message: The type initializer for 'ETRC.Program' threw an exception.

原因不明。不知道这个程序需要哪个版本的.NET Framework支持?
发表于 2009-3-23 18:39:53 |
大哥你终于出现了,你不知道我手工输入的辛苦呀,你不能开发的让他能自动更新数据么,里面也不能复制。你吧QQ贴出来吧,方便大家联系

手机版|小黑屋|Archiver|海子铁路网 ( 京ICP证120035号 京公网安备11010702001036 )

GMT+8, 2024-5-17 18:19

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表