Clojure 相当于 Perl 的“解压”功能

问题描述 投票:0回答:1

我正在寻找与 Clojure 中 Perl 的

unpack
功能等效的函数。

这里是一些示例 Perl 代码,说明了我想要完成的任务:

# get a 5-byte string, skip 3, then grab 2 8-byte strings, then the rest
($leading, $s1, $s2, $trailing) = unpack("A5 x3 A8 A8 A*", $data);

Clojure 中是否有相当于

unpack
的东西?

perl clojure unpack
1个回答
0
投票

没有,也没有对应的

pack

我会使用正则表达式。虽然我无法真正说出替代方案的精确程度,因为我不了解 Perl 以及它如何处理字符串中的多字节字符。

;; If you prefer named groups.
(let [data "xxxxx___yyyyyyyyzzzzzzzz1234awerasdf"
      pattern #"(?<leading>.{5}).{3}(?<s1>.{8})(?<s2>.{8})(?<trailing>.*)"
      matcher (re-matcher pattern data)]
  (re-find matcher)
  (into {}
        (map (fn [[n idx]]
               [(keyword n) (.group matcher ^long idx)]))
        (.namedGroups matcher)))

;; If you prefer to rely on positions.
(let [data "xxxxx___yyyyyyyyzzzzzzzz1234awerasdf"
      pattern #"(.{5}).{3}(.{8})(.{8})(.*)"
      [_ leading s1 s2 trailing] (re-matches pattern data)]
  {:leading  leading
   :s1       s1
   :s2       s2
   :trailing trailing})
© www.soinside.com 2019 - 2024. All rights reserved.