Несоответствие пространства табуляции в текстовом файле с использованием переполнения стека

Я создал этот прикрепленный файл, загруженный здесь: https://files.fm/u/uqm4marg
Этот файл был создан с использованием PHP. \ t был использован для вставки табуляции. Работает поиск всего файла, но для пространства табуляции между INR0564 D и INR0564 C. Это пространство табуляции имеет только один пробел, в то время как другие пространства табуляции имеют 4, как между 667722553331 и INR0564.

Таким образом, вопрос заключается в том, что \ t использовалось для предоставления табуляции между символами, почему в разных местах разное расстояние.

Изображение ниже взято на возвышенный текст, который показывает различные пространства табуляции, упомянутые выше.

0

Решение

Ваш редактор настроен на перемещение курсора до следующей остановки табуляции. При ширине вкладки, настроенной на 4 символа, позиции табуляции находятся со смещением строки 0, 4, 8, a.s.o. Должно быть понятно, что горизонтальный язычок по смещению 11 будет перемещаться к смещению 12, а не к 15 (11 + 4). Это просто не фиксированная ширина, но должна рассматриваться в отношении фиксированных остановок.

1

Другие решения

Tabs Spaces не имеет ничего общего, если вы дали правильный \ t в коде, он сгенерирован правильно. Вкладка поведения отличается в зависимости от типа редактора.

Например, если вы используете приведенный ниже код для генерации

 $myfile = fopen(getcwd()."/newfile.txt", "w") or die("Unable to open
file!");
$txt = "BATBALL88026613\n
667722553331\tINR0564D\tSeptember\t2.00Salary\n
051122334432\tINR0564C\tSeptember\t1.00Salary\n
056401112233\tINR0564C\tSeptember\t1.00Salary";
fwrite($myfile, $txt);
fclose($myfile);

А ты попробуй открыть в NOTEPAD и NOTEPAD ++ будет по другому. Этого несоответствия не будет в NOTEPAD ++.

1

tab персонаж не вставляет пробелы. Это один символ, который интерпретируется редактором.

назначение символа табуляции должен помочь в записи данных в табличном формате, т.е. в табличном формате. Поскольку строки уже представлены строками текста, tab персонаж помогает создавать столбцы.

Редакция истолковывает tab символ как перемещение курсора вправо, а не на одну позицию (как это происходит с space символ), но пока не достигнет следующей остановки табулятора.

В компьютерном программном обеспечении табуляторы обычно устанавливаются в каждом 8 или 4 столбцах. Это означает, что либо столбцы 1, 9, 17 a.s.o. или же 1, 5, 9, 13 и т.д. На вашей картинке (и из описания в вашем вопросе) кажется, что «размер» вашей вкладки, которую вы используете, 4 столбцы (это наиболее часто используемое значение в настоящее время).

Поскольку tab символ отправляет курсор в фиксированную позицию, его воспринимаемый «размер» не является фиксированным, он зависит от столбца курсора до tab персонаж.

На вашем изображении первый столбец данных имеет 12 символов (он отображается в столбцах 1-12 в редакторе). Затем tab символ отправляет курсор на следующий табулятор, который находится в столбце 17, Следующее значение (INR0564, 7 символы) отображается в столбцах 17-23, Следующий tab символ «короче», он охватывает только 1 колонка; он отправляет курсор в столбец 25 где отображается D, Следующий заставляет курсор перейти к столбцу 29 (3 столбцы), где ничего не отображается. Тогда есть еще один tab это охватывает 4 символы до следующего табулятора (в столбце 33) где 2.0SEp Salary значение начинается.

Столбцы, табуляторы anb и ваши данные изображены ниже:

1   5   9   13  17  21  21  25  29  33 ...
v   v   v   v   v   v   v   v   v   v  ...
056665554531    INR0564 D       2.0Sep Salary
.   |      .|.  |   |
+-->|      >|+->+-->|

На приведенном выше рисунке точка (.) отмечает положение курсора после каждого столбца данных и канала (|) отмечает свою позицию после tab персонаж был отображен. «Стрелки» в последней строке показывают, как курсор перепрыгивал через несколько столбцов из-за tab символов, чтобы добраться до следующего табулятора.

0
По вопросам рекламы [email protected]