Я пишу некоторый код, чтобы взять входную строку и вывести ее в несколько строк, чтобы соответствовать определенной длине строки, мне также нужно, чтобы она всегда начинала новые строки с нового слова, чтобы слова не пересекались между строками, что затрудняет читать.
Вероятно, это не лучший способ сделать это, но это то, что я придумал;
DECLARE
P_output_record VARCHAR2(1000) := 'Well, Prince, so Genoa and Lucca are now just family estates of the Buonapartes. But I warn you, if you dont tell me that this means war, if you still try to defend the infamies and horrors perpetrated by that Antichrist I really believe he is Antichrist';
v_message_length INTEGER;
v_written_chars INTEGER;
v_new_line VARCHAR2(30);
v_chars_to_write INTEGER;
BEGIN
dbms_output.enable();
v_message_length := LENGTH(P_output_record);
v_written_chars := 0;
WHILE(v_written_chars < v_message_length)
LOOP
IF(v_written_chars + 28 > v_message_length) THEN
v_chars_to_write := (v_message_length - v_written_chars);
v_new_line := SUBSTR( P_output_record, v_written_chars, v_chars_to_write);
ELSE
v_new_line := SUBSTR( P_output_record,v_written_chars, 28);
--get the index of the last space so words dont spill to new lines
v_chars_to_write := INSTR(v_new_line,' ', -1);
END IF;
DBMS_OUTPUT.PUT_LINE( SUBSTR( P_output_record, v_written_chars, v_chars_to_write-1));
v_written_chars := v_written_chars + v_chars_to_write;
END LOOP;
END;
Это работает, так как каждая строка начинается с нового слова, и слова не выходят за пределы строк. Однако вывод немного странный, вторая строка теперь имеет значение, где находится пробел или какой текст всегда начинается с пробела, я попытался объединить слова вместе, но он просто начинается с пробела заранее (но эй, это было ожидал) и даже попробовал другой текст все вместе, но все равно получаю тот же результат, что и вторая строка, начинающаяся с пробела, что говорит о том, что с моей логикой что-то не так, но я бы предположил, что если это моя логика, то это произойдет в других строках тоже что это не так.
Смотрите здесь, как есть пробел во второй строке.
Well, Prince, so Genoa and
Lucca are now just family
estates of the Buonapartes.
But I warn you, if you dont
tell me that this means
war, if you still try to
defend the infamies and
horrors perpetrated by that
Antichrist I really believe
he is Antichri
P.S. Я знаю, что мне не хватает некоторых символов в конце последней строки, но это проблема в другой раз.