Избавление от последних четырех пустых строк в строке

У меня есть файл SQL в Unix, который я получаю с помощью PHP, вырезая его с начала и с конца и возвращая его в textarea с помощью AJAX. Файл:

Set LINESIZE 1000
set timing on
set FEEDBACK off
SET PAGESIZE 50000
set COLSEP |
set trim on
set RECSEPCHAR ~

select * from tbvalid_value where discrete_code like '%  %' and DISCRETE_CODE != 'U - Unreturned  and billed'
;

exit;

после exit; у меня есть еще одна пустая строка.

Я хочу вернуть только оператор select:

select * from tbvalid_value where discrete_code like '% %' and DISCRETE_CODE != 'U - Unreturned and billed'

Для этого сначала я вырезаю первые 8 рядов с помощью этой функции:

function str_chop_lines($str, $lines = 8) {
    return implode("\n", array_slice(explode("\n", $str), $lines));
};

$sql = str_chop_lines($sqlString);

Это сокращает все операторы Set и пустую 8-ю строку.

Затем я хочу избавиться от последней части строки (от ; до exit;). Для этого я использую это:

$finalSql = substr($sql, 0, strpos($sql, ';'));

Но когда я возвращаю строку на сторону клиента textarea, я получаю в конце 4 пустые пустые строки, как видно на этом рисунке (красные строки были добавлены мной для иллюстрации 4 пустых строк):

Пустые строки

Я пытался обрезать эти строки разными способами:

$sqlReturnByAjax = substr($finalSql, 0, strrpos($finalSql, "\n"));

$sqlReturnByAjax = str_replace('/n/n', '/n', $finalSql);

$sqlReturnByAjax = rtrim($finalSql);

Но ничего из этого не сработало.
Что я упустил?


person Alon Adler    schedule 19.11.2013    source источник
comment
Что выводит var_dump($finalSql);?   -  person Amal Murali    schedule 19.11.2013
comment
@AmalMurali string(110) "select * from tbvalid_value where discrete_code like '% %' and DISCRETE_CODE != 'U - Unreturned and billed' "   -  person Alon Adler    schedule 19.11.2013
comment
Могут ли они быть в текстовом поле дополнительными строками?   -  person Lawrence Cherone    schedule 19.11.2013
comment
textarea пуст до того, как AJAX вернет строку, так почему я вижу 4 новые строки после ?   -  person Alon Adler    schedule 19.11.2013
comment
@Alon_A: Так в чем же проблема? Вы не можете получить нужную строку из текста?   -  person Amal Murali    schedule 19.11.2013
comment
@AmalMurali проблема в том, что после текста я получаю 4 пустые строки в textarea, я не понимаю, откуда берутся эти строки?   -  person Alon Adler    schedule 19.11.2013
comment
@Alon_A: Это видно, когда вы просматриваете исходный код страницы? Можешь скопировать-вставить это сюда? Я не уверен, что это за персонажи.   -  person Amal Murali    schedule 19.11.2013
comment
AmalMurali, который ОП упоминал на протяжении всего своего сообщения от AJAX   -  person Lawrence Cherone    schedule 19.11.2013
comment
Что ж, в качестве решения я просто обрезаю строку со стороны клиента, используя Javascript replace(/^\s+|\s+$/g,''). Но я до сих пор не понимаю, почему он с самого начала возвращается с пустыми строками...   -  person Alon Adler    schedule 19.11.2013


Ответы (2)


Почему бы просто не trim ввести строку?

echo trim($yourString);

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

person Rogue    schedule 19.11.2013
comment
Он по-прежнему добавляет 4 пустых строки к textarea - person Alon Adler; 19.11.2013
comment
повторяйте ваши переменные повсюду, вы должны использовать trim() для любой переменной, на которой есть пробел. - person Rogue; 19.11.2013
comment
Я просто использую Javascript, чтобы обрезать строку после того, как ответ вернулся со стороны PHP... Может быть, я что-то пропустил, но это справляется; 0) - person Alon Adler; 19.11.2013

Если содержимое файла на сервере

Set LINESIZE 1000
set timing on
set FEEDBACK off
SET PAGESIZE 50000
set COLSEP |
set trim on
set RECSEPCHAR ~

select * from tbvalid_value where discrete_code like '%  %' and DISCRETE_CODE != 'U - Unreturned  and billed'
;

exit;

и вам нужна только строка, начинающаяся с оператора SELECT, вы можете использовать PHP file() для чтения файла в массив строк, а затем найти тот, который вам нужен. Например.:

$sql = '';
$file = file('/path/to/file', FILE_IGNORE_NEWLINES);

foreach($file as $line) {
  if(strpos($line, 'select') === 0) {
    $sql = $line;
    break;
  }
}
person marekful    schedule 19.11.2013
comment
Как это поможет? Вы break выходите из цикла на самой первой итерации, поэтому $sql будет содержать первую строку файла, а это не то, чего хочет OP. - person Amal Murali; 19.11.2013
comment
Заявление может состоять более чем из 1 строки, я не знаю количество строк для каждого утверждения. Я только знаю, что мне не нужны первые 8 строк и последние ; и exit;. - person Alon Adler; 19.11.2013