lingo入门教程之三——文件数据处理

有时候我们想输入的数据是在一个Excel表格或者其他什么形式中,或者说这里数据是实时变化的并不利于直接在程序中输入,耳而应该在程序之外将数据存储,实现数据与程序的分离存储,这个时候就涉及到程序与数据之间的传递

下面简要介绍一个如何进行数据与程序之间的传递

下面的讲解都是基于如下的问题模型

有个城市都需要采购一定量的物品,但每个城市只允许在自身所在的城市采购,城市i的最低需求量为need(i),最大供应量为supply(i),单件采购成本为cost(i),如何采购总成本最小?

模型:设order(i)为城市i的采购量,则问题的数学模型为

1.直接粘贴复制

开始的程序

[plain]  view plain  copy
  1. model:  
  2. sets:  
  3. cities/!待输入的数据个数;/:cost,need,supply,order;  
  4. endsets  
  5. min=@sum(cities:cost*order);  
  6. @for(cities:need<=order;order<=supply);  
  7. data:  
  8. cost,need,supply=!待输入的数据值;;  
  9. enddata  
  10. end  

直接利用把存储在Excel或者其他什么地方的数据复制粘贴过来,这里需要注意lingo里面的复制是按列进行的(这里在前面已经讲过),不注意的话可能会发生数据赋值的错乱

粘贴的选项

扫描二维码关注公众号,回复: 957841 查看本文章

可以依次试一下上面的不同粘贴格式的效果

下面是我直接在Excel中Ctrl+C与Ctrl+V实现的

[plain]  view plain  copy
  1. model:  
  2. sets:  
  3. cities/  
  4. Seattle   
  5. Detroit   
  6. Chicago   
  7. Denver    
  8.   
  9. /:cost,need,supply,order;  
  10. endsets  
  11. min=@sum(cities:cost*order);  
  12. @for(cities:need<=order;order<=supply);  
  13. data:  
  14. cost,need,supply=  
  15. 12  1600    1700      
  16. 28  1800    1900      
  17. 15  1200    1300      
  18. 20  1000    1100      
  19.   
  20. ;  
  21. enddata  
  22. end  

2.读取ldt数据文件:@file(数据文件名);
这里默认数据文件与程序文件在同一子目录下面,否则找不到数据文件而报错
[plain]  view plain  copy
  1. model:  
  2. sets:  
  3. cities/@file(数据文件.ldt)/:@file(数据文件.ldt);  
  4. endsets  
  5. min=@sum(cities:cost*order);  
  6. @for(cities:need<=order;order<=supply);  
  7. data:  
  8. cost=@file(数据文件.ldt);  
  9. need=@file(数据文件.ldt);  
  10. supply=@file(数据文件.ldt);  
  11. enddata  
  12. end  

如果路径不一致,也可以手动添加,Edit --> insert new object...


应当注意此时的文件类型的ldt格式,

具体里面内容:Seattle,Detroit,Chicago,Denver~cost,need,supply,order~12,28,15,20~1600,1800,1200,1000~1700,1900,1300,1100 注意中间的不同赋值用~间隔


3.存取Excel数据文件:@ole(文件名,元素名);

[plain]  view plain  copy
  1. model:  
  2. sets:  
  3. cities/@ole('原始数据1.xls','cities')/:cost,need,supply,order;  
  4. endsets  
  5. min=@sum(cities:cost*order);  
  6. @for(cities:need<=order;order<=supply);  
  7. data:  
  8. cost,need,supply=@ole('原始数据1.xls'); !读取数据文件  
  9. @ole('原始数据1.xls','order')=order; !将计算结果存入表格中  
  10. enddata  
  11. end  

对于路径不一致的情况解决方式与上述一样


猜你喜欢

转载自blog.csdn.net/eric_e/article/details/80327686