如何在CPLEX OPL模型中实现数据文件读写及数组数据复用
在CPLEX OPL中从.dat文件读取数组到新数组的实现方法
你可以通过以下步骤在同一OPL模型内完成写入数组到.dat文件,再读取该文件内容到新数组的操作,且使用main函数控制执行流程:
完整实现代码
range Number = 0..6; int Example[i in Number] = i; // 1. 将原数组写入Example.dat文件 execute { var o = new IloOplOutputFile("Example.dat"); o.writeln("Example="); o.writeln(Example); o.writeln(";"); o.close(); } // 定义存储读取结果的新数组 int NewExample[Number]; // 2. 用main函数读取文件并赋值给新数组 main { // 先执行模型初始化和文件写入逻辑 thisOplModel.generate(); // 读取Example.dat的全部内容 var inputFile = new IloOplInputFile("Example.dat"); var fileContent = inputFile.readAll(); inputFile.close(); // 解析文件中的数组值:提取[]内的数值部分 var numStr = fileContent.match(/\[([^\]]+)\]/)[1]; // 分割字符串并转换为整数数组 var numValues = numStr.split(",").map(s => parseInt(s.trim())); // 将解析后的数值赋值给新数组 for (var idx = 0; idx < numValues.length; idx++) { thisOplModel.NewExample[idx] = numValues[idx]; } // 输出验证读取结果 writeln("读取完成,新数组NewExample的值:"); writeln(thisOplModel.NewExample); }
关键说明
- 执行顺序控制:通过
thisOplModel.generate()先触发模型的初始化和execute块的执行,确保Example.dat文件被正确生成后再进行读取操作。 - 文件解析逻辑:利用正则表达式提取.dat文件中数组的数值部分,再通过字符串分割、类型转换得到整数数组,最后循环赋值给新数组。
- 结果验证:在main函数末尾输出新数组的值,可直接确认读取是否成功。
内容的提问来源于stack exchange,提问作者MO MO MA
相关产品推荐
相关产品推荐

