Импорт текстового файла -- ведущие пробелы в первой колонке "ломают строй"

Автор spider, 6 ноября 2014, 11:44

0 Пользователи и 1 гость просматривают эту тему.

spider

Здравствуйте!

Пытаюсь импортировать файл с числами в столбцах фиксированной ширины, разделенных пробелами. Все числа, как это водится, выровнены по десятичной точке. В первой колонке либо числа, опять же выровненные по точке, либо слова, выровненные вправо. ПОэтому некоторые строки имеют пробелы в начале. Выглядят файлы как то так:

если в первой колонке числа
  0.0 1.1
123.0 2.2
45.0 3.3
678.0 4/4

если в первой колонке слова

BCD   0.0 1.1
ABCВ 123.0 2.2
BCD  45.0 3.3
ABCD 678.0 4/4

В обоих случаях поля в строках, начинающихся с пробелов (1,3), сдвигаются на одно поле вправо.

Прилагаю кусок оригинального файла

CyberDaemon

Цитата: spider от  6 ноября 2014, 11:44
Здравствуйте!

Пытаюсь импортировать файл с числами в столбцах фиксированной ширины, разделенных пробелами. Все числа, как это водится, выровнены по десятичной точке. В первой колонке либо числа, опять же выровненные по точке, либо слова, выровненные вправо. ПОэтому некоторые строки имеют пробелы в начале. Выглядят файлы как то так:

если в первой колонке числа
  0.0 1.1
123.0 2.2
45.0 3.3
678.0 4/4

если в первой колонке слова

BCD   0.0 1.1
ABCВ 123.0 2.2
BCD  45.0 3.3
ABCD 678.0 4/4

В обоих случаях поля в строках, начинающихся с пробелов (1,3), сдвигаются на одно поле вправо.

Прилагаю кусок оригинального файла

Куда импортировать?
Цитата: spider от  6 ноября 2014, 11:44
Здравствуйте!

Пытаюсь импортировать файл с числами в столбцах фиксированной ширины, разделенных пробелами. Все числа, как это водится, выровнены по десятичной точке. В первой колонке либо числа, опять же выровненные по точке, либо слова, выровненные вправо. ПОэтому некоторые строки имеют пробелы в начале. Выглядят файлы как то так:

если в первой колонке числа
  0.0 1.1
123.0 2.2
45.0 3.3
678.0 4/4

если в первой колонке слова

BCD   0.0 1.1
ABCВ 123.0 2.2
BCD  45.0 3.3
ABCD 678.0 4/4

В обоих случаях поля в строках, начинающихся с пробелов (1,3), сдвигаются на одно поле вправо.

Прилагаю кусок оригинального файла

Натравить на текст awk, или sed предварительно. Убрать лидирующие пробелы.
Может макрос какой состряпать, что бы при открытии заменял "^ " на "^".

spider

Цитата: CyberDaemon от  6 ноября 2014, 12:48
Куда импортировать?
В лист Calc.
УУПС... ошибся топиком.
Цитировать
Натравить на текст awk, или sed предварительно. Убрать лидирующие пробелы.
Может макрос какой состряпать, что бы при открытии заменял "^ " на "^".
Макрос, который бы при назначении пробельного материала (пробел, табуляция) в качестве разделителя .csv в диалоге выбора галку предложил поставить, типа: "[ ] - игнорировать пробелы в начале строки", было бы неплохо. Но, увы, я такой не напишу -- бейсика не знаю.
Придется sed.

rami

У вас все файлы без расширения? Как вы хотите открывать файлы? Вот такой результат подойдёт?

spider

Цитата: rami от  6 ноября 2014, 15:08
У вас все файлы без расширения?
Как вы хотите открывать файлы?
Вот такой результат подойдёт?
В линуксовом офисе все открывается -- ему точки в имени по барабану. Можно файлу дать имя из одних пробелов и все будет пучком.
Я их открываю через меню "Вставить-Лист_из_файла". Несколько файлов в один документ с несколькими листами.
Результат такой и надо. Я сейчас для этого седом пользуюсь "sed -i s/^\ *// file".




rami

Цитата: spider от  6 ноября 2014, 19:26В линуксовом офисе все открывается -- ему точки в имени по барабану. Можно файлу дать имя из одних пробелов и все будет пучком.
Это не тот ответ, что я ожидал получить, я хотел узнать, вы получаете файлы с типовым именем log-<порядковый номер> без расширения?

Цитата: spider от  6 ноября 2014, 19:26Я сейчас для этого седом пользуюсь "sed -i s/^\ *// file".
Проблема уже решена?

spider

Цитата: rami link=topic=4583.msg28215#msg28215 date=14153117
я хотел узнать, вы получаете файлы с типовым именем
b]log-[/b]<порядковый номер> без расширения?
fopen() + fprintf()
Цитировать
Проблема уже решена?
Руками через sed.

JohnSUN

Цитата: spider от 10 ноября 2014, 12:03
Цитировать
Проблема уже решена?
Руками через sed.
И это печально... Не обращал внимания на переключатель Фиксированная ширина/С разделителями?
По себе знаю, когда постоянно пользуешься "С разделителями", как-то забываешь о других возможностях...
Цитировать
Параметры разделения
Указывает, используются ли в качестве разделителей данных разделители или фиксированная ширина строк.
Фиксированная ширина
Разделяет данные с фиксированной шириной (одинаковым числом символов) на столбцы. Щелкните линейку в окне предварительного просмотра, чтобы задать ширину.
С разделителями
Выберите разделитель для данных. (и далее по тексту)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

spider

Цитата: JohnSUN от 10 ноября 2014, 12:18
Не обращал внимания на переключатель Фиксированная ширина/С разделителями?
По себе знаю, когда постоянно пользуешься "С разделителями", как-то забываешь о других возможностях...
Это я самое первое попробовал. Не работает, если "фиксированная ширина" устроена табуляциями. Только если пробелами.
Табуляция выглядит, как стрелочка и принимается как один символ фиксированной ширины, поэтому колонки сбиваются.

rami

Цитата: spider от 11 ноября 2014, 09:01Не работает, если "фиксированная ширина" устроена табуляциями. Только если пробелами.
Табуляция выглядит, как стрелочка и принимается как один символ фиксированной ширины, поэтому колонки сбиваются.
После вашего "Руками через sed." ещё хорошо выглядит.
Цитата: spider от 11 ноября 2014, 09:01Импорт текстового файла -- ведущие пробелы в первой колонке "ломают строй"
Это не пробелы что-то там ломают, а вы ломаете. Выложеный вами файл log-04 прекрасно открывается как предлагает JohnSUN.

JohnSUN

Да-да, я ведь тоже от образца в log-04 отталкивался... Откуда табуляторы-то взялись?
Если они - tab'ы - всегда будут, то и разговаривать не о чем: этот формат офис всасывает вообще без вопросов. Главное, не забыть "птичку" на нужном разделителе поставить
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

JohnSUN, у меня файл log-04 без расширения CSV по умолчанию открывается в текстовом редакторе, а если указать LibreOffice, то в Writer. С расширением CSV открывается в Calc. Макрос открывает правильно и без расширения.
Цитата: JohnSUN от 11 ноября 2014, 10:31Откуда табуляторы-то взялись?
"Руками через zad." Извиняюсь за мой французский.

spider

Походу, что-то вас разозлило.
Еще раз -- если в первой колонке число или текст выровнены вправо, файл не импортируется правильно, чем там столбцы не размечай -- чеками или фиксированным форматом.
1) фиксированный формат не учитывает, что табулятор имеет переменную ширину;
2) нет возможности пропустить пробелы перед первым непробельным символом в строке.
Чтобы решить проблему (2) я прогоняю файлы через сед, чтобы они импортировались правильно. Если у кого-нибудь есть лучшее решение, или автоматизация, я с удовольствием приму.

spider

Цитата: JohnSUN от 11 ноября 2014, 12:31
Да-да, я ведь тоже от образца в log-04 отталкивался... Откуда табуляторы-то взялись?
Если они - tab'ы - всегда будут, то и разговаривать не о чем: этот формат офис всасывает вообще без вопросов. Главное, не забыть "птичку" на нужном разделителе поставить
Табуляторы и пробелы -- это совершенно один и тот же материал с точки зрения вывода, в первом случае нерастяжимый, во втором растяжимый. В зависимости от того, нужна ли растяжимость при выводе или нет, используется либо тот, либо другой.
Насчет "всасывает tab'ы без вопросов", Вы погорячились. Не "всавывает" выровненное вправо в первой колонке даже с вопросами. Что касается текста в первой колонке, то хотя это и коряво, его и по левой границе можно упереть, но как быть с числами? Числа всегда выравниваются по десятичной точке.





JohnSUN

Цитата: spider от 13 ноября 2014, 16:02
Походу, что-то вас разозлило.
Честно? Да... Даёшь один образец данных, сам экспериментируешь с другим, а мы полными кретинами выглядим - элементарную операцию сделать не можем (баг повторить)
Цитата: spider от 13 ноября 2014, 16:18
Табуляторы и пробелы -- это совершенно один и тот же материал с точки зрения вывода
Э-э-э... пардоньте... с чьей, говорите, точки зрения?
Цитата: spider от 13 ноября 2014, 16:18
Насчет "всасывает tab'ы без вопросов", Вы погорячились.
И не "выкай" на меня, не ссорились...  ;)
Цитата: spider от 13 ноября 2014, 16:18Не "всасывает" выровненное вправо в первой колонке даже с вопросами. Что касается текста в первой колонке, то хотя это и коряво, его и по левой границе можно упереть, но как быть с числами? Числа всегда выравниваются по десятичной точке.
Повтори образцы данных... С пробельным выравниванием и с табуляторным.
Не может быть, чтобы на такую задачу у тебя ушло столько времени! Ты же уже столько времени с этими CSV возишься, уже давно руку набил... Вдохновения нет, что ли?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне