열에서 문자 사이에 행을 가져온 다음 다른 열 값(선택한 행만)을 다른 열로 이동합니다.안녕,
아래 그림과 같이 선택한 행의 여러 열 값을 같은 테이블의 다른 열로 이동하거나 복사하여 붙여넣고 싶습니다.
관심 있는 행은 항상 :Item == "start"에서 :Item == "values"까지이지만, 전체 행은 다를 수 있습니다. 관심 있는 행의 Col1과 Col2에 있는 값을 Col 3과 Col 4로 복사하여 붙여넣거나 옮기고 싶습니다. 현재 생각은 :Item 아래에 start에서 values까지의 문자열을 포함하는 목록을 수동으로 만든 다음 :Item에 목록이 포함되어 있으면 "1"로 레이블을 지정할 열을 만드는 것입니다. 거기에서 Col 3 == Col 1, Col 4 = Col 2로 설정합니다.
그러나 시작과 값 사이의 행은 다를 수 있습니다. 누군가가 목록을 수동으로 만들 필요 없이 작업을 수행하는 더 나은 방법을 알고 있는지 궁금합니다. 그러나 행을 찾기 위해 "시작"과 "값"을 기반으로 합니다.
원래 테이블

이동 후

자동화 및 스크립팅Re: 열에서 문자 사이에 행을 가져온 다음 다른 열 값(선택한 행만)을 다른 열로 이동합니다.시작 및 중지 목록을 만드는 것보다 수동으로 잘라내어 붙여넣는 것이 더 쉬울 것으로 생각합니다.
Re: 열에서 문자 사이에 행을 가져온 다음 다른 열 값(선택한 행만)을 다른 열로 이동합니다.하지만 그 목적은 일상적인 자동화이고 시작과 값 사이의 행은 수시로 변경될 수 있습니다.
Re: 열에서 문자 사이에 행을 가져온 다음 다른 열 값(선택한 행만)을 다른 열로 이동합니다.그런 다음 가능한 한 간단하게 만들고 다음과 같은 구성 테이블을 만듭니다.

JSL은 다음과 같이 매우 간단합니다.
Names Default To Here( 1 );
dt = Current Data Table();
dtConfig = Data Table( "Config" );
For( i = 1, i <= N Rows( dtConfig ), i++,
frCol = dtConfig:From Column[i];
toCol = dtConfig:To Column[i];
For( k = dtConfig:Start Row[i], k <= dtConfig:End Row[i], k++,
Column( dt:toCol )[k] = Column( dt, FromCol )[k];
If( dtConfig:Move_Copy == "Move",
Column( dt, FromCol ) = ""
);
);
);
Re: 열에서 문자 사이에 행을 가져온 다음 다른 열 값(선택한 행만)을 다른 열로 이동합니다.구성 테이블 없이도 안전하게 할 수 있다고 생각합니다. 이것은 아무것도 덮어쓰기 전에 Col 1에 "시작" 행의 값이 있는지 확인합니다. 네, 저는 For Each()를 사용하는 것을 좋아합니다.
Names Default To Here( 1 );
starts = Loc( dt:Item << Get Values, "start" );
ends = Loc( dt:Item << Get Values, "values" );
For Each( {v, i}, starts,
If( :Col 1[v] != "",
For Each( {val, idx}, v :: ends[i],
:Col 3[val] = :Col 1[val];
:Col 4[val] = :Col 2[val];
:Col 1[val] = "";
:Col 2[val] = "";
)
)
);