텍스트 문자열을 기간으로 변환안녕,
문자열을 기간(기간)으로 변환하는 데 문제가 있습니다.
문제 중 하나는 문자열의 공백입니다. "days"와 "hours" + 숫자 사이에 공백이 없습니다. 그리고 분 + 숫자 사이에 공백이 있습니다.
| 녹음 시간 |
| 9일 21시간 54분 |
| 6일 21시간 29분 |
나는 더 앞서 나가기 위해 대체 단어를 사용하려고 시도했지만 공백이 없을 때는 작동하지 않는 것 같습니다.
나는 또한 "텍스트를 열로"를 사용하려고 시도했지만 저에게도 효과가 없었습니다.
Br 줄리
Re: 텍스트 문자열을 기간으로 변환일, 시간, 분... 아마도 아닐 수도 있습니다. 데이터 소스 패턴이 변경되지 않는다고 확신하는 경우 바로 가기를 사용할 수 있습니다. 데이터의 소스 패턴이 변경되어 공백을 추가할 수 있는 경우 \s*는 향후 선택적 공백을 허용합니다.
이러한 예 중 어느 것도 몇 주가 추가되는 미래 소스를 처리하지 못할 것입니다. 그들은 아마 그것을 조용히 무시할 것입니다. ^ 및 $를 사용하여 패턴이 처음부터 끝까지 일치하도록 강제한 경우 나중에 예기치 않은 항목(주)이 표시되면 누락된 값을 얻을 수 있습니다.
Mark의 접근 방식은 몇 주를 처리하기 위해 수정하기가 더 쉬울 것입니다. 내 접근 방식은 예상치 못한 것을 테스트하기 위해 ^ 및 $를 추가하는 것이 더 쉬울 것입니다.
나는 Mark의 예를 실행하지 않았지만 \D가 필요하지 않다는 것이 옳다고 생각합니다.
편집: Mark의 공식에는 3개의 독립적인 정규식 일치가 있으며 올바른 숫자를 얻기 위해 숫자 뒤에 오는 단어에 의존합니다. 내 수식에서 무언가는 상수 텍스트(일, 시간, 분)를 건너뛰어야 합니다. 실제 단어를 사용하면 공식을 더 쉽게 이해할 수 있습니다.
Re: 텍스트 문자열을 기간으로 변환감사합니다. 그러나 이것을 더 잘 이해하기 위해 수식에 "일, 시간, 분"을 포함해야 합니까?
또한 "\d+"가 아닌 "\D+"가 필요한 이유는 무엇입니까?
Re: 텍스트 문자열을 기간으로 변환그리고 약간의 변형
New Table( "Rec_time",
Add Rows( 8 ),
New Column( "Recording time",
Character,
"Nominal",
Set Values(
{"9days21hours54minutes", " 6 days 21 hours 29 minutes",
"2days 21 hours 24 minutes", "13days 20hours04minutes",
" 9 days 21hours 54 minutes", "9days 21hours 54 minutes",
"9days 21hours 54 minutes", "6days 20hours 39 minutes"}
),
Set Display Width( 240 )
),
New Column( "data",
Numeric,
"Nominal",
Format( ":day:hr:m", 14 ),
Input Format( ":day:hr:m" ),
Formula(
Informat(
Regex(
:Recording time,
"(\d+)\s*days\s*(\d+)\s*hours\s*(\d+)\s*minutes",
":\1:\2:\3"
),
":day:hr:m"
)
)
)
)Re: 텍스트 문자열을 기간으로 변환이 경우도 만만치 않습니다. Regex() 함수를 사용했습니다. 열 수식은 다음과 같습니다.
Num( Regex( :Recording time, "(\d+)day", "\1" ) ) * In Days( 1 )
+Num( Regex( :Recording time, "\D+(\d+)hour", "\1" ) ) * In Hours( 1 )
+Num( Regex( :Recording time, "\D+(\d+) minute", "\1" ) ) * In Minutes( 1 )
이 결과를 얻기 위해 숫자 데이터에 기간 형식 중 하나를 적용했습니다.

귀하의 검토를 위해 수정된 데이터 표를 첨부했습니다.