Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить конец строки DOS, ^M ???  
V
    Опции темы
burakov
Дата 19.5.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Добрый день.

под linux конец строки набранный под windows отображается как знак "^M"

как при помощи perl его удалить по всему файлу?

и возможно ли это сделать под windows? (или это нужно делать на самом linux.


вот такая вот конструкция 
$_ =~ s/\^M//g;

НЕ ПОМОГЛА!

большое спасибо.



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
amg
Дата 19.5.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



s/\r//; Под linux этого достаточно. Чтобы работало под windows, нужно записывать файл в binmode.
PM MAIL   Вверх
burakov
Дата 19.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 28.7.2006

Репутация: нет
Всего: нет



Спасибо, помогло!



--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
ramus
Дата 19.5.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: нет
Всего: 1



Я для кроссплатформенности (WINDOWS, LINUX) использую такой подход
сначала удаляю конец строки в прочитанной строке

Код

    # del 0D 0A (<> \n)
    $_ =~ s/\x0D?\x0A$//;


а потом добавляю если надо например записать файл в формате WINDOWS (причем скрипт может работать как в WINDOWS так и в LINUX)

 
Код

  $fo = new IO::File "> $fo_name" or die "Cannot open $fo_name : $!";
   binmode($fo);

   print $fo $_.chr(13).chr(10) or die "Write to $fo_name failed: $!";


PM MAIL   Вверх
gcc
Дата 3.8.2008, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



подскажите как сохранить

в общем есть текст

вот это делает прямую строку s/\r//; , а нужно чтобы просто удалил ^M/
Код


#!/usr/local/bin/perl

open(MA, "t.txt"); while ($line = <MA>) {
$line=~s/\x0D?\x0A$//;
                             
open (DB, ">2.txt") || die print "Cannot open file $basefile: $!";
print DB  "$line";
close(DB);
}

как записать файл и просто удалить?



PM WWW ICQ Skype GTalk Jabber   Вверх
ramus
Дата 3.8.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 21.2.2008

Репутация: нет
Всего: 1



Уважаемый gcc !

Не совсем понял Ваш вопрос... Что требуется "просто удалить"?

Возможно Вы хотели построчно читать входной файл, редактировать прочитанную строку (убрать 0D, оставив только 0A или в десятичной системе счисления "10") и записать строку в выходной файл. Затем удалить входной файл. Если это так, то вот немного переделанный Ваш пример (каждый раз открывать файл на прочитанную строку в цикле  слишком жестоко по отношению к компьютеру smile ) :

Код

#!/usr/local/bin/perl
open(MA, "t.txt"); 
open(DB, ">2.txt") or die "ERROR: Cannot open file DB for write: $!";
binmode(DB);

while ($line = <MA>) {
  $line=~s/\x0D?\x0A$//;
  print DB  "$line".chr(10) or die "ERROR: Write to DB failed: $!";
}

close(DB) or die "ERROR: Close DB failed: $!";
close(MA) or die "ERROR: Close MA failed: $!";

unlink ("t.txt");


PS
Обычно вместо MA и DB я использую более осмысленные, что то типа FI (file input) и FO (file output). Здесь оставил как в Вашем оригинальном тексте ...
PM MAIL   Вверх
gcc
Дата 6.8.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



Код

cat file1.txt | perl -ne 'chomp; print $_, "\n";' > file2.txt


Код

#!/bin/sh

LC_ALL=ru_RU.UTF-8
export LC_ALL

cat 1.php
echo "-----------"

cat 1.php | col -b


сделал
PM WWW ICQ Skype GTalk Jabber   Вверх
amg
Дата 6.8.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 9
Всего: 50



Цитата(gcc @ 6.8.2008,  10:35)
Код

cat file1.txt | perl -ne 'chomp; print $_, "\n";' > file2.txt

Не проще ли cp file1.txt file2.txt ? Результат должен быть тот же  smile 
Может, Вы хотели perl -pe 's/\r$//' file1.txt > file2.txt ?
(Либо perl -i -pe 's/\r$//' file*.txt)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0885 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.