Как я могу получить символ в данном индексе в Perl?

Один из подходов состоит в том, чтобы создать таблицу чисел , которая содержит список чисел, которые вы можете найти в содержимом столбца:

CREATE TABLE numbers( idx INTEGER);
INSERT INTO numbers VALUES(1);
INSERT INTO numbers VALUES(2);
...
INSERT INTO numbers VALUES(10);

Теперь, при условии, что все Значения страницы имеют 7 символов, причем последние 3 являются цифрами, мы можем JOIN исходную таблицу с таблицей numbers генерировать отсутствующие записи:

SELECT 
    CONCAT(
        SUBSTRING(t.First_Page, 1, 4), 
        REPLICATE('0', 3 - LEN(n.idx)),
        n.idx
    ) AS [ALl Pages],
    t.id
FROM
    mytable t
    INNER JOIN numbers n 
        ON  n.idx >= CAST(SUBSTRING(t.First_Page, 5, 3) AS int)
        AND n.idx <= CAST(SUBSTRING(t.Last_Page, 5, 3) AS int)

Это демо в DB Fiddle с вашими примерами возвращаемых данных:

ALl Pages | id
:-------- | -:
ABC_001   |  1
ABC_002   |  1
ABC_003   |  1
ABC_004   |  1
ABC_005   |  2
ABC_006   |  3
ABC_007   |  3
ABC_008   |  3
ABC_009   |  3
ABC_010   |  3

38
задан brian d foy 10 April 2009 в 03:41
поделиться

3 ответа

Используйте substr длиной 1, как в:

$nth = substr($string, n-1, 1);

Также ищите perlmonks для других решений.

43
ответ дан dirkgently 27 November 2019 в 03:37
поделиться

Следствие для других ответов substr () состоит в том, что вы можете использовать его для установки значений в индекс также. Он поддерживает это как lvalue или с дополнительными аргументами. Это также очень похоже на соединение, что то же самое, но для массивов.

$string = "hello";
substr($string, 2, 2) = "this works?";
substr($string, 2, 2, "same thing basically");
@a = qw(s t r i n g s a n d t h i n g s);
@cut_out = splice(@a, 2, 2);
@cut_out = splice(@a, 2, 2, @replacement);
2
ответ дан jettero 27 November 2019 в 03:37
поделиться
$char = substr( $mainstring, $i , 1 );

Это один из способов сделать это, возможно, самый ясный.

Если вам нужно было числовое значение , и вы намеревались сделать следующие лоты:

unpack("W*","hello")

Возвращает массив значений Char:

print join ",", unpack("W*","hello")  ; 
#  104,101,108,108,111

Для правильного Unicode / Utf8 материала, который вы, возможно, захотите используйте

use utf8;
unpack("U*","hello\0ƀ\n") 
# 104,101,108,108,111,0,384,10
22
ответ дан Kent Fredric 27 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: