如何在 postscript 中创建随机字符串?

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

我正在尝试编写一个后记文档,它将输出 5 个随机字符的字符串。 我可以制作一个由 26 个大写字母 A-Z 组成的数组 但我无法弄清楚如何将五个随机索引连接到一个字符串。 我什至不知道如何通过索引来寻址数组。我读了绿色、蓝色的书,试图找到这个模糊的要求,我的头很痛。

用简单的英语来说:

例如。 数组=“A,B,C,...X,Y,Z” rand_idx = int rand mod 26 输出字符串 = char(rand_idx)+char(rand_idx)+char(rand_idx)+char(rand_idx)+char(rand_idx)...重复

输出 = SVDRT KHSTE NCSDE SSGYP DISVT

尝试使用 -RAND- 生成随机数时,我的代码失败

代码

/inch {72 mul} def 1 inch 10 inch moveto
/Times-Roman findfont 15 scalefont setfont

% ADDED THE DEF AT THE END, AS PER JASONHARPER CORRECTION. THX JH
/letterArray [(A) (B) (C) (D) (E) (F) (G) (H) (I) (J)] def

/rrr {rand 26 mod} def
rrr cvs show %%%%%% THIS FAILS. PS MAKES ME FEEL STUPID. 

letterArray 5 get show
letterArray 15 get show
( ) show
letterArray 12 get show
letterArray 8 get show
( ) show

showpage```

arrays string random postscript
1个回答
0
投票

要在 PostScript 中创建随机 5 个字符的字符串,您需要利用一些 PostScript 技巧来处理数组、随机索引和串联。让我们将其分解为多个步骤,以阐明该过程的每个部分。

关键步骤

  1. 定义可供选择的字符数组
  2. 生成随机索引并使用它们从数组中选取字符。
  3. 将所选字符连接成单个字符串。
  4. 显示结果。
示例代码

这里是一个示例 PostScript 代码,它应该使用您描述的方法生成 5 个字符的随机字符串。

/inch {72 mul} def % Define inch conversion for positioning 1 inch 10 inch moveto % Move to starting position on page /Times-Roman findfont 15 scalefont setfont % Define the array of uppercase letters /letterArray [(A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K) (L) (M) (N) (O) (P) (Q) (R) (S) (T) (U) (V) (W) (X) (Y) (Z)] def % Function to generate a random index within 0-25 /randIdx { rand 26 mod } def % Function to generate a random 5-character string /genRandomString { % Initialize an empty string ( ) dup 5 { % Repeat 5 times randIdx % Get a random index letterArray exch get % Use it to fetch a letter from letterArray exch % Bring the string to the top of the stack 3 -1 roll % Roll the stack to concatenate strcat % Concatenate the letter to the string } repeat } def % Use genRandomString to display multiple random 5-character strings 5 { genRandomString show % Show the random string ( ) show % Add a space between strings } repeat showpage % End the page
代码说明

  1. 数组定义:

    • letterArray
       是从 
      A
      Z
       的单字符字符串数组。
  2. 随机索引生成:

    • /randIdx { rand 26 mod } def
       定义一个生成 0 到 25 之间随机索引的函数。
  3. 随机字符串生成:

      函数
    • /genRandomString
      初始化一个空字符串(
      ( ) dup
      ),然后使用循环添加五个随机字母。
    • 循环内:
      • randIdx
         生成随机索引。
      • letterArray exch get
         在随机索引处检索来自 
        letterArray
         的字母。
      • strcat
        运算符将每个随机字母连接到不断增长的字符串。
    • 循环结束后,函数在堆栈上留下一个 5 个字符的字符串。
  4. 显示多个字符串:

    • 5 { genRandomString show ( ) show } repeat
       生成并显示五个随机的 5 个字符的字符串,每个字符串后跟一个空格。
  5. 末页

    • showpage
       最终确定页面上的输出。
注释

    此处使用
  • strcat
     运算符来连接字符串。并非所有 PostScript 解释器都支持它,因此请检查与您的解释器的兼容性。
  • 此脚本显示五个随机字符串,每个字符串包含 5 个字符,中间有空格。如果您需要不同的计数,请调整
  • { genRandomString show ( ) show } repeat
     中的数字。
此代码应该生成您想要的随机字符串!

© www.soinside.com 2019 - 2024. All rights reserved.