英文:
Algorithm for skipping or deleting "mirror" data
问题
以下是您要翻译的内容:
"I am reading in a file that looks like this:
As you see in this data, line 5 is a "mirror" of line 1 (same values but flip-flopped). I want to skip one of these rows, not both. Either the first 2942 - 3911 (line 1) can be retained, or 3911 - 2942 (5) can be retained. I'd kind of prefer the "mirror" line 5 to stay but it's not that important.
I tried this algorithm below, but it deletes/skips over all the rows - the pair and its mirror - rather than just skipping one of them.
Any thoughts?? I will keep working on this, but I'm stumped and would love some clever ideas.
The output would look like this:"
英文:
I am reading in a file that looks like this:
line# person-pin reciprocal-person-pin relationship reciprocal-relationship
1 2942 3911 son mother
2 3911 2560 client financial advisor
3 3911 1195 employee employer
4 3911 1190 church member church
5 3911 2942 mother son
6 3911 3910 mother daughter
7 3911 3912 mother daughter
8 3911 5062 wife husband
As you see in this data, line 5 is a "mirror" of line 1 (same values but flip-flopped). I want to skip one of these rows, not both. Either the first 2942 - 3911 (line 1) can be retained, or 3911 - 2942 (5) can be retained. I'd kind of prefer the "mirror" line 5 to stay but it's not that important.
I tried this algorithm below, but it deletes/skips over all the rows - the pair and its mirror - rather than just skipping one of them.
Any thoughts?? I will keep working on this, but I'm stumped and would love some clever ideas.
FOR EACH ttRelationshipData:
FIND FIRST ttRelationshipData2 WHERE ttRelationshipData.person-pin EQ ttRelationshipData2.reciprocal-person-pin
AND ttRelationshipData.reciprocal-person-pin EQ ttRelationshipData2.person-pin NO-LOCK NO-ERROR.
IF AVAILABLE ttRelationshipData2 THEN NEXT.
ELSE DO:
CREATE ttRelationship.
ASSIGN
ttRelationship.alpha-pin = ttRelationshipData.constituent-pin
ttRelationship.alpha-role = ttRelationshipData.constituent-relationship-name
ttRelationship.bravo-pin = ttRelationshipData.related-constituent-pin
ttRelationship.bravo-role = ttRelationshipData.relatedconstituent-rel-name.
END.
END.
The output would look like this:
line# person-pin reciprocal-person-pin relationship reciprocal-relationship
1 3911 2560 client financial advisor
2 3911 1195 employee employer
3 3911 1190 church member church
4 3911 2942 mother son
5 3911 3910 mother daughter
6 3911 3912 mother daughter
7 3911 5062 wife husband
答案1
得分: 1
以下是翻译好的部分:
你的测试对于第1行和第5行都会返回true,因此这两行都会被跳过,而是测试ttRelationShip表。
我对你的代码进行了一些其他更改:
- NO-LOCK不适用于临时表
- 使用替代样式以避免水平滚动条
- 在“然后下一个”之后,不需要else块
- 使用标签来执行下一个
CreateLoop:
对于每个ttRelationshipData:
查找ttRelationship
其中ttRelationship.alpha-pin = ttRelationshipData.related-constituent-pin
和ttRelationship.bravo-pin = ttRelationshipData.constituent-pin
无错误。
如果ttRelationship可用,则继续CreateLoop。
创建ttRelationship。
分配
ttRelationship.alpha-pin = ttRelationshipData.constituent-pin
ttRelationship.alpha-role = ttRelationshipData.constituent-relationship-name
ttRelationship.bravo-pin = ttRelationshipData.related-constituent-pin
ttRelationship.bravo-role = ttRelationshipData.relatedconstituent-rel-name。
结束。
英文:
Your test will be true for both rows 1 and 5, so both are skipped, test for the ttRelationShip table instead.
I made some other changes to your code
- NO-LOCK does not apply to temp-tables
- alternate styling to avoid horizontal scrollbars
- after
then next
you don't need the else block - use labels on next
CreateLoop:
FOR EACH ttRelationshipData:
FIND ttRelationship
WHERE ttRelationship.alpha-pin = ttRelationshipData.related-constituent-pin
AND ttRelationship.bravo-pin = ttRelationshipData.constituent-pin
NO-ERROR.
IF AVAILABLE ttRelationship THEN NEXT CreateLoop.
CREATE ttRelationship.
ASSIGN
ttRelationship.alpha-pin = ttRelationshipData.constituent-pin
ttRelationship.alpha-role = ttRelationshipData.constituent-relationship-name
ttRelationship.bravo-pin = ttRelationshipData.related-constituent-pin
ttRelationship.bravo-role = ttRelationshipData.relatedconstituent-rel-name.
END.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论