function [N,TM,H,NM,M,SH,time]=DataReadT2FPT(RealPath) fin=fopen(RealPath,'r'); %打开txt文件 A=fscanf(fin,'%d'); A=A'; N=A(1);%总工件数 TM=A(2);%总的机器数 H=zeros(1,N);%各工件工序数 NM={};%各工序可选机器数 M={};%各工序可选机器号 time={}; p=5;%当前位置 z=[0,0,0,0,0]; for i=1:N H(i)=A(p); for j=1:H(i) %p=p+1; NM{i,j}=0; for k=1:TM %p=p+1; %M{i,j,k}=A(p); time{i,j,k}=A(1,p+1:p+5); if (~eql(time{i,j,k},z)) NM{i,j}=NM{i,j}+1; M{i,j,NM{i,j}}=k; end p=p+5; end end p=p+3; end SH=sum(H); end
时间: 2024-04-28 08:25:09 浏览: 126
这是一个 MATLAB 的函数,用于读取一个指定路径的 txt 文件,并将文件中的数据解析成为函数的输出参数。函数的输入参数是 RealPath,表示要读取的文件路径。函数的输出参数有:
- N:总工件数
- TM:总的机器数
- H:各工件工序数的数组
- NM:各工序可选机器数的单元格数组
- M:各工序可选机器号的单元格数组
- time:各工序可选机器的加工时间的单元格数组
- SH:所有工件的总工序数
函数中使用 fscanf 函数读取了文本文件中的数据,并将其解析为一个整数数组 A。然后,从数组 A 中提取了总工件数 N 和总机器数 TM。接下来,使用一个循环来遍历每个工件,提取每个工件的工序数 H(i),以及每个工序可选的机器数 NM{i,j} 和可选的机器号 M{i,j,NM{i,j}}。在循环中还提取了每个工序可选机器的加工时间,存储在 time{i,j,k} 中。最后,计算出所有工件的总工序数 SH 并作为输出参数。
相关问题
for File=1:1 [N,TM,H,NM,M,SH,time]=DataReadT2FPT(RealPath{File});
这段代码中,首先使用for循环遍历RealPath数组中的每个元素,循环变量File从1开始逐次递增,每次循环处理一个文件。在循环体内部,调用DataReadT2FPT函数读取文件数据,并将读取到的结果分别存储到变量N、TM、H、NM、M、SH和time中。具体地,DataReadT2FPT函数的作用是读取指定文件中的数据,解析数据格式并将数据存储到对应的变量中。根据代码的命名规则和调用方式来看,该函数的名称可能意味着它是用于读取某种特定格式的数据文件的。由于我们没有该函数的实现代码,因此无法确定它的具体实现细节和返回值类型。
UPDATE FPT_PRDLOTACTIVITYHISTORY t SET t.SumCycleTime = ( SELECT SUM(PH.EVENTTIME - ( SELECT /* +USE_HASH(A,PH) */ MAX(A.Eventtime) FROM MES_PRODUCTHISTORY A WHERE A.FACTORYNAME = PH.FACTORYNAME AND A.TIMEKEY < PH.TIMEKEY AND a.Productname = ph.Productname AND a.ProcessOperationName = ph.OldProcessOperationName AND a.EventName IN ('Release','Receive','TrackOut','Skip','ChangeOper','Rework') ) ) AS SumCycleTime FROM MES_PRODUCTHISTORY PH WHERE ph.factoryname = t.factoryname AND ph.LotName = t.LotName AND ph.Timekey = t.Timekey ) --, t.CycleTime = t.SumCycleTime / t.PRODUCTQUANTITY WHERE t.factoryname = 'ARRAY' AND t.Timekey >= '20230502220000' -- YYYYMMDDHH24MISS.HH AND t.Timekey < '20230502221000' -- YYYYMMDDHH24MISS.HH AND t.MappingEventName = 'Leave' AND nvl(t.Oldsubproductquantity,0) > 0 优化这个oracle sql
这个 SQL 语句可以进行以下优化:
1. 使用 EXISTS 替代子查询
可以将子查询改写为 EXISTS 子查询,因为 EXISTS 子查询只需要判断子查询是否返回结果,而不需要返回具体的值,比子查询更高效。
```sql
UPDATE FPT_PRDLOTACTIVITYHISTORY t
SET t.SumCycleTime = (
SELECT SUM(PH.EVENTTIME - (
SELECT /* +USE_HASH(A,PH) */
MAX(A.Eventtime)
FROM MES_PRODUCTHISTORY A
WHERE A.FACTORYNAME = PH.FACTORYNAME
AND A.TIMEKEY < PH.TIMEKEY
AND a.Productname = ph.Productname
AND a.ProcessOperationName = ph.OldProcessOperationName
AND a.EventName IN ('Release','Receive','TrackOut','Skip','ChangeOper','Rework')
)
) AS SumCycleTime
FROM MES_PRODUCTHISTORY PH
WHERE ph.factoryname = t.factoryname
AND ph.LotName = t.LotName
AND ph.Timekey = t.Timekey
AND EXISTS (
SELECT 1
FROM MES_PRODUCTHISTORY A
WHERE A.FACTORYNAME = PH.FACTORYNAME
AND A.TIMEKEY < PH.TIMEKEY
AND a.Productname = ph.Productname
AND a.ProcessOperationName = ph.OldProcessOperationName
AND a.EventName IN ('Release','Receive','TrackOut','Skip','ChangeOper','Rework')
)
)
WHERE t.factoryname = 'ARRAY'
AND t.Timekey >= '20230502220000'
AND t.Timekey < '20230502221000'
AND t.MappingEventName = 'Leave'
AND NVL(t.Oldsubproductquantity,0) > 0;
```
2. 使用 JOIN 替代子查询
可以使用 JOIN 将子查询中的 MAX 函数改写为 JOIN 操作,从而提高查询效率。
```sql
UPDATE FPT_PRDLOTACTIVITYHISTORY t
SET t.SumCycleTime = (
SELECT SUM(PH.EVENTTIME - A.MaxEventtime) AS SumCycleTime
FROM MES_PRODUCTHISTORY PH
INNER JOIN (
SELECT FACTORYNAME, Productname, OldProcessOperationName, MAX(Eventtime) AS MaxEventtime
FROM MES_PRODUCTHISTORY
WHERE EventName IN ('Release','Receive','TrackOut','Skip','ChangeOper','Rework')
GROUP BY FACTORYNAME, Productname, OldProcessOperationName
) A ON PH.FACTORYNAME = A.FACTORYNAME
AND PH.Productname = A.Productname
AND PH.OldProcessOperationName = A.OldProcessOperationName
AND PH.Eventtime > A.MaxEventtime
WHERE ph.factoryname = t.factoryname
AND ph.LotName = t.LotName
AND ph.Timekey = t.Timekey
)
WHERE t.factoryname = 'ARRAY'
AND t.Timekey >= '20230502220000'
AND t.Timekey < '20230502221000'
AND t.MappingEventName = 'Leave'
AND NVL(t.Oldsubproductquantity,0) > 0;
```
以上两种优化方式都可以有效提高 SQL 查询效率。
阅读全文