#java #excel #eclipse #if-statement #talend
#java #excel #eclipse #if-statement #talend
Вопрос:
Мы пытаемся записать вычисляемое поле в качестве даты отгрузки if-then-else в java с помощью eclipse (ИНСТРУМЕНТ Talend DI)
Окружающая среда: мы пытаемся создать задание в talend.
source systems (sql server and excel file)---->tmap---->Target system(Excel file)
Входное выражение: формула if-then-else
дата отправки
if ([Customer])='0000001' or
(TRIM([Corp Acct Name]))='GENERAL' or (TRIM([Corp Acct Name]))='ABC' or (TRIM([Corp Acct Name]))='XYZ'
or (TRIM([Corp Acct Name]))='CDE' then ([ShipDate])
elseif DATEPART('weekday',([MABD])) =1 and [Total Lead Time]<=5 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =1 and [Total Lead Time]>5 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]<=1 then (([MABD])-[Total Lead Time])
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]<=6 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =2 and [Total Lead Time]>6 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]<=2 then (([MABD])-[Total Lead Time])
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]<=7 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =3 and [Total Lead Time]>7 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]<=3 then (([MABD])-[Total Lead Time])
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]<=8 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =4 and [Total Lead Time]>8 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time])
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =5 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time]-1)
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-3)
elseif DATEPART('weekday',([MABD])) =6 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-5)
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]<=4 then (([MABD])-[Total Lead Time]-2)
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]<=9 then (([MABD])-[Total Lead Time]-4)
elseif DATEPART('weekday',([MABD])) =7 and [Total Lead Time]>9 then (([MABD])-[Total Lead Time]-6)
END
Мы попробовали: Тернерный оператор в talend
row1.customer='0000001'|| trim(row1.CorpAcctName)='GENERAL'|| trim(row1.CorpAcctName)='ABC' or trim(row1.CorpAcctName)='XYZ or trim(row1.CorpAcctName)=='SCDE' ||?row1.ShipDate:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD)=1)-1) and row2.L 1<5?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=1)-1) and row2.L 1>5?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L 1<=1?row1.MABD-row2.L 1:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L 1<=6?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=2)-1) and row2.L 1>6?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L 1<=2?row1.MABD-row2.L 1:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L 1<=7?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=3)-1) and row2.L 1>7?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L 1<=3?row1.MABD-row2.L 1:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L 1<=8?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=4)-1) and row2.L 1>8?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L 1<=4?row1.MABD-row2.L 1:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L 1<=9?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=5)-1) and row2.L 1>9?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L 1<=4?row1.MABD-row2.L 1-1:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L 1<=9?row1.MABD-row2.L 1-3:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=6)-1) and row2.L 1>9?row1.MABD-row2.L 1-5:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L 1<=4?row1.MABD-row2.L 1-2:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L 1<=9?row1.MABD-row2.L 1-4:
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=7)-1) and row2.L 1>9?row1.MABD-row2.L 1-6:""
Любая помощь в этом была бы очень признательна?
Комментарии:
1.
if-else
это не выражение, это оператор. В Java нет «подпрограмм», то, что вы имеете в виду, скорее всего, является методом. Я бы порекомендовал начальный учебник, подобный этому .
Ответ №1:
сначала у вас есть несколько синтаксических ошибок в вашем выражении: если вы хотите сравнить 2 Int, правильный оператор — «==». (И если вы хотите сравнить две строки, вы должны использовать "0000001".equals(row1.customer)
).
Это выражение не имеет смысла :
Integer.toString (TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD=1)-1)
если вы хотите сравнить DAY_OF_WEEK с 1, используйте
(TalendDate.getPartOfDate("DAY_OF_WEEK",row1.MABD)-1) ==1
Тогда использование необработанного троичного оператора в tMap, возможно, не самое лучшее, что можно сделать: он не подходит для такого сложного выражения, как это (комментарии отсутствуют, повторное использование невозможно). Вместо этого вы должны создать метод в разделе «Routine» и предоставить ему row1.customer,row1.CorpAcctName,row1.ShipDate,row1.MABD в качестве параметров.
Затем в этом обычном методе вы можете использовать операторы IF / ELSE, которые вы не можете использовать в tMap напрямую.
public static int myFunction(String customer,String CorpAcctName,Integer ShipDate,Integer MABD) {
//adding comment is possible here
if ("0000001".equals(customer).......) {
Затем в tMap вам просто нужно вызвать свою функцию в конструкторе выражений.
Комментарии:
1. возможно ли дать попробовать добавить одну строку elseif в вашу общедоступную функцию. это будет действительно полезно для меня.
2. Я попробовал общедоступную функцию с другим if, НО получаю ошибку при выполнении процедуры в соответствии с вашим указанием вот ссылка paste.ofcode.org/QeCgHQuawvJpHAsC2Pg76H
3. В сообщении об ошибке говорится, что установленное время (дата) в типе Calendar неприменимо для аргументов (String): вы должны использовать тип даты для параметра MABD, чтобы заставить TalendDate.getPartofDate() работать
4. После указания даты в MABD появляется следующая ошибка paste.ofcode.org/hGrGYMxaCgvCMiVh6yBgUH
5. вы действительно читаете сообщение об ошибке перед его публикацией? вы использовали java.sql.Date вместо java.util. Введите дату в методе.