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

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

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

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

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

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

1.直接粘贴复制

开始的程序

model:
sets:
cities/!待输入的数据个数;/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=!待输入的数据值;;
enddata
end

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

粘贴的选项

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

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

model:
sets:
cities/
Seattle	
Detroit	
Chicago	
Denver	

/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=
12	1600	1700	
28	1800	1900	
15	1200	1300	
20	1000	1100	

;
enddata
end

2.读取ldt数据文件:@file(数据文件名);
这里默认数据文件与程序文件在同一子目录下面,否则找不到数据文件而报错
model:
sets:
cities/@file(数据文件.ldt)/:@file(数据文件.ldt);
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost=@file(数据文件.ldt);
need=@file(数据文件.ldt);
supply=@file(数据文件.ldt);
enddata
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(文件名,元素名);

model:
sets:
cities/@ole('原始数据1.xls','cities')/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=@ole('原始数据1.xls'); !读取数据文件
@ole('原始数据1.xls','order')=order; !将计算结果存入表格中
enddata
end

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



  • 17
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值