Страница 1 из 1
UNIX-ы, плиз хелп.
Добавлено: 25 окт 2006, 16:04
george
Вываливаю data extract во flat file. Формирую данные, пишу в строку, потом перехожу к следующей, опять пишу в строку. Строка переменной длины, в зависимости от длины полей, которые в нее пишутся. Все хорошо, но есть одна загвоздка. "Длинные" строки (пока что не могу понять какой длины) разбиваются на две или больше. Думал - просто редактор так отображает файл. Проверил HEX представление - стоит там в-явную возврат каретки/перевод строки. Трижды проверил код, никаких ВК/ПС там нету. Т.е такое чувство, что ЮНИХ самостоятельно строки разбивает как ему нравится.
Это так или нет? Если да, то какая длина максимальная? Есть ли способ ее увеличить?
Спасибо заранее.
Re: UNIX-ы, плиз хелп.
Добавлено: 25 окт 2006, 16:07
sobomax
george писал(а):Вываливаю data extract во flat file. Формирую данные, пишу в строку, потом перехожу к следующей, опять пишу в строку. Строка переменной длины, в зависимости от длины полей, которые в нее пишутся. Все хорошо, но есть одна загвоздка. "Длинные" строки (пока что не могу понять какой длины) разбиваются на две или больше. Думал - просто редактор так отображает файл. Проверил HEX представление - стоит там в-явную возврат каретки/перевод строки. Трижды проверил код, никаких ВК/ПС там нету. Т.е такое чувство, что ЮНИХ самостоятельно строки разбивает как ему нравится.
Это так или нет? Если да, то какая длина максимальная? Есть ли способ ее увеличить?
Спасибо заранее.
Ничего не понятно. Как говорил классик "потрудитесь объяснить кто на ком стоял".
Чем пишете, откуда? На чем код? Какие функции используете?
-Maxim
Re: UNIX-ы, плиз хелп.
Добавлено: 25 окт 2006, 16:26
папа Карло
george писал(а):Вываливаю data extract во flat file. Формирую данные, пишу в строку, потом перехожу к следующей, опять пишу в строку. Строка переменной длины, в зависимости от длины полей, которые в нее пишутся. Все хорошо, но есть одна загвоздка. "Длинные" строки (пока что не могу понять какой длины) разбиваются на две или больше. Думал - просто редактор так отображает файл. Проверил HEX представление - стоит там в-явную возврат каретки/перевод строки. Трижды проверил код, никаких ВК/ПС там нету. Т.е такое чувство, что ЮНИХ самостоятельно строки разбивает как ему нравится.
Это так или нет? Если да, то какая длина максимальная? Есть ли способ ее увеличить?
Спасибо заранее.
странное говоришь.... не знаю каким хексом смотрел... на перле сбацай скриптик и напечатай длины каждой строки с ее номером... потом посмотришь.... такого я еще не видел....
Добавлено: 25 окт 2006, 16:27
aissp
Вообще то поддерживает, такое чувство что вы пользуетесь vi, тогда да у вас проблемы, автоматический враппинг срабатавыает на пробельные символы
Добавлено: 25 окт 2006, 16:46
george
Фух, попытаюсь детализировать, если получитца. Юних из меня никакой

Просто база под ним крутится.
Есть база. Мне из нее надо выгрузить данные, в простой текстовой файл. Данные одной и той же структуры в каждой строке. Каждая строка может несмотря на это иметь данные разной длины. Например, в случае с Имя Фамилия:
папа^Карло
Универсал^Универсалыч
вторая строка явно длиннее, хотя структура одна и та же. Разделитель между полями ап-эрров, ака ^.
Вот. Так когда строка превышает определенную длину - мне кажется, она автоматически разбивается на две или сколько надо, чтобы каждая из подстрок не превышала эту длину.
Хотя я до сих пор не уверен, или это не вьювер (пардон, не редактор!) так делает, зараза. Может, он так просто данные показывает.
Вьювер кстати - встроенный в фтп Смарттерма, когда в фтп моду заходишь, даже не знаю как он называется. Именно там если HEX (а не текст) просмотр включить - показывает 0d 0a в конце строки, т.е. ВК/ПС.
Ну что, я смог?

Добавлено: 25 окт 2006, 16:55
папа Карло
george писал(а):Фух, попытаюсь детализировать, если получитца. Юних из меня никакой

Просто база под ним крутится.
Есть база. Мне из нее надо выгрузить данные, в простой текстовой файл. Данные одной и той же структуры в каждой строке. Каждая строка может несмотря на это иметь данные разной длины. Например, в случае с Имя Фамилия:
папа^Карло
Универсал^Универсалыч
вторая строка явно длиннее, хотя структура одна и та же. Разделитель между полями ап-эрров, ака ^.
Вот. Так когда строка превышает определенную длину - мне кажется, она автоматически разбивается на две или сколько надо, чтобы каждая из подстрок не превышала эту длину.
Хотя я до сих пор не уверен, или это не вьювер (пардон, не редактор!) так делает, зараза. Может, он так просто данные показывает.
Вьювер кстати - встроенный в фтп Смарттерма, когда в фтп моду заходишь, даже не знаю как он называется. Именно там если HEX (а не текст) просмотр включить - показывает 0d 0a в конце строки, т.е. ВК/ПС.
Ну что, я смог?

чтоб отмести проблему юниха.... посчитай длинну строк перлом .... сразу все на свои места встанет. может и проблемыт о нет, а ты нагнетаешь

Добавлено: 25 окт 2006, 16:58
aissp
Не-а
Имя сестра имя (с) три мушкетера
Чем ты делаешь всю ету работу? скриптами на шелле? Елси да то формируешь файл cat? или ето прямо из базы с помощь. какой то утилиты? Что за база что за утилита? Верняк ворд враппер гдей то включенным имеет место быть
Добавлено: 25 окт 2006, 17:08
george
Каки перлом, какую строку?

Ничо не понимаю...
А, я кажется понимаю, что ты имеешь в виду. Это мне китаец один (китайка точнее) мозги совсем задурила... Я тут прочитал, что их слушатца надо

Завтра проверю-доложу
Спасибо мужики!
Добавлено: 25 окт 2006, 17:16
папа Карло
теперь просто посмотри... правильную ли длнину показывает перл для тех строк что обрублены...
Код: Выделить всё
use strict;
my $file = 'myfile.txt';
my $i = 1;
open(IN,"<$file") || die "$file: $!\n";
while(<IN>)
{
chomp;
my $l = length();
print "$i\t$l\n";
$i++;
}
close(IN);
Добавлено: 25 окт 2006, 17:23
george
Спасибо папа, посмотрю и это. Хотя я уже придумал как и что

Добавлено: 25 окт 2006, 17:30
dima
george писал(а):Каки перлом, какую строку?

Ничо не понимаю...
А, я кажется понимаю, что ты имеешь в виду. Это мне китаец один (китайка точнее) мозги совсем задурила... Я тут прочитал, что их слушатца надо

Завтра проверю-доложу
Спасибо мужики!
если источник данных база данных, то "ищи на третьей планете". Идет в порядке важности (imho)
1. проверь, что данные в таблицая не имеют перевода строки (\r и-или \n)
2. читаешь через ODBC или native ? смотри если стоят опции трансляции данных и даннае записаны в Unicod-е или code-page (например koi-8 )
3. смотри исходники, которые читают-пишут.
Unix не имеет проблемы с длинной строки (на сколько я знаю), открывай файл и пиши туда по одной букве долго, все запишется без проблем, даже если длинна файла привысит unsigned long.
Добавлено: 25 окт 2006, 20:52
Nick
george писал(а):Вьювер кстати - встроенный в фтп Смарттерма, когда в фтп моду заходишь, даже не знаю как он называется. Именно там если HEX (а не текст) просмотр включить - показывает 0d 0a в конце строки, т.е. ВК/ПС.
Т.е. ты файл сперва на писюк тащишь? Да еще в text mode, небось? В Unix 0D0A быть точно не может, ибо там признак новой строки тока 0A.
Добавлено: 26 окт 2006, 16:54
george
Короче, дело очень простое оказалось. Файла была открыта с параметром recsize=512 (по умолчанию). Поставил параметр 1024, и все пошло.
Просто открытие файла без параметра предполагает по умолчанию 512. А доков никаких нету, кгбычно. Пока в исходники системной утилиты не залез и не разобрался.
Всем спасибо за участие!
Добавлено: 03 ноя 2006, 03:44
Garik
я бы db-шную команду export с указанным выше разделителем использовал ,она тогда все эти переводы сама бы вставляла. Может я в воду .. того, но такое вроде как на всех бд работает.