我正在使用Google表格,这超出了我的简单脚本编写的范围。
我有许多包含逗号分隔值的单元格;
AA, BB, CC, BBB, CCC, CCCCC, AA, BBB, BB
BB, ZZ, ZZ, AA, BB, CC, BBB, CCC, CCCCC, AA, BBB, BB
我想返回:
AA, BB, CC, BBB, CCC, CCCCC etc.
BB, ZZ, AA, CC, BBB, CCC, CCCCC etc.
...删除重复项。每个单元格。
我无法解决。我已经尝试过所有删除重复项的在线工具。但是它们都会删除整个文档中的重复项。
部分问题是,我不能将单元格按照“字母”顺序放置(这会使事情变得简单),而必须按照它们出现的原始顺序进行保存。
我还可以随意使用(但超出我的能力)Open Refine,我认为这是一个聪明的工具。有人可以将我指向有关此类查询的教程。抱歉,这么简单的问题!
答案 0 :(得分:4)
这是在OpenRefine中执行此操作的方法。
我使用的公式是:
import Data.Maybe
import qualified Data.Text as T
import Data.URLEncoded as DU
import Reflex.Dom
import Control.Monad.Trans as CMT
url :: T.Text
url = T.pack "parm1=one&parm2=two"
main = do
mainWidget body
body :: MonadWidget t m => m ()
body = el (T.pack "div") $ do
let istr = CMT.liftIO $ DU.importString (T.unpack url)
t <- fmap (T.pack . fromMaybe "" . DU.lookup "parm2") istr
text t
这意味着:用逗号分隔单元格中的值,删除重复项,然后再次使用逗号将它们加入。
编辑:
OpenRefine中使用Python而不是GREL的另一种解决方案。这一个可以更好地保留原始顺序。
Python / Jython脚本:
int main ()
{
int udp_fd = -1;
struct sockaddr_in sockaddr;
char *ip = (char *)"xx.yyy.zzz.aaa";
int port = 1234;
udp_fd = socket(AF_INET, SOCK_DGRAM, 0);
if (udp_fd == -1) {
printf("Could not create socket\n");
return -1;
}
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = inet_addr(ip);
sockaddr.sin_port = htons(port);
if (bind(udp_fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) == -1) {
printf("Could not bind to %s: %d: %d: %d\n", ip, port, errno, udp_fd);
return -1;
}
if (fcntl(udp_fd, F_SETFL, O_NONBLOCK | O_ASYNC) < 0) {
printf("Error setting socket as non-blocking \n");
return -1;
}
return 0;
}