Каков лучший способ сделать dos2unix на 500k файле строки в Windows? [закрытый]

Думаю, я понял это. Существует определенный формат URL, который автоматически открывает приложение «Файлы», которое является общим документом: // - Вот простая функция, которая, кажется, просто выполняет эту задачу.

    func openSharedFilesApp() {
    let documentsUrl =  FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let sharedurl = documentsUrl.absoluteString.replacingOccurrences(of: "file://", with: "shareddocuments://")
    let furl:URL = URL(string: sharedurl)!
    UIApplication.shared.open(furl, options: convertToUIApplicationOpenExternalURLOptionsKeyDictionary([:]), completionHandler: nil)
}
6
задан ninesided 24 November 2008 в 00:41
поделиться

7 ответов

Вот острота Perl, взятая из http://www.technocage.com/~caskey/dos2unix/

#!/usr/bin/perl -pi
s/\r\n/\n/;

Можно выполнить его следующим образом:

perl dos2unix.pl < file.dos > file.unix

Или, можно выполнить его также таким образом (преобразование сделано оперативное):

perl -pi dos2unix.pl file.dos

И вот моя (наивная) версия C:

#include <stdio.h>

int main(void)
{
   int c;
   while( (c = fgetc(stdin)) != EOF )
      if(c != '\r')
         fputc(c, stdout);
   return 0;
}

Необходимо выполнить его с входным и выходным перенаправлением:

dos2unix.exe < file.dos > file.unix
11
ответ дан 8 December 2019 в 04:10
поделиться

При установке основы cygwin слишком тяжел, существуют много автономные dos2unix и unix2dos Windows автономные основанные на консоли программы в сети, многих с доступным источником C/C++. Если бы я понимаю требование правильно, любое из этих решений соответствовало бы приятно автоматизированному сценарию сборки.

6
ответ дан 8 December 2019 в 04:10
поделиться

Если Вы находитесь в Windows и нуждаетесь в чем-то выполненном в сценарии пакетной обработки, можно скомпилировать простую программу C для добиваний цели.

#include <stdio.h>

int main() {
    while(1) {
        int c = fgetc(stdin);

        if(c == EOF)
            break;

        if(c == '\r')
            continue;

        fputc(c, stdout);
    }

    return 0;
}

Использование:

myprogram.exe < input > output

Оперативное редактирование было бы немного более трудным. Кроме того, можно хотеть сохранить резервные копии оригиналов по некоторым причинам (в случае, если Вы случайно разделяете двоичный файл, например).

Та версия удаляет все символы CR; если Вы только хотите удалить тех, которые находятся в паре CR-LF, можно использовать (это - классический метод с одной символьной спиной :-):

/* XXX Contains a bug -- see comments XXX */

#include <stdio.h>

int main() {
    int lastc = EOF;
    int c;
    while ((c = fgetc(stdin)) != EOF) {
        if ((lastc != '\r') || (c != '\n')) {
            fputc (lastc, stdout);
        }
        lastc = c;
    }
    fputc (lastc, stdout);
    return 0;
}

Можно отредактировать файл оперативный режим использования "r +". Ниже общая myd2u программа, которая принимает имена файлов как аргументы.Примечание: Эта программа использует ftruncate для обрубания дополнительных символов в конце. Если существует какой-либо лучше (стандартный) способ сделать это, отредактируйте или прокомментируйте.Спасибо!

#include <stdio.h>

int main(int argc, char **argv) {
    FILE *file;

    if(argc < 2) {
        fprintf(stderr, "Usage: myd2u <files>\n");
        return 1;
    }

    file = fopen(argv[1], "rb+");

    if(!file) {
        perror("");
        return 2;
    }

    long readPos = 0, writePos = 0;
    int lastC = EOF;

    while(1) {
        fseek(file, readPos, SEEK_SET);
        int c = fgetc(file);
        readPos = ftell(file);  /* For good measure. */

        if(c == EOF)
            break;

        if(c == '\n' && lastC == '\r') {
            /* Move back so we override the \r with the \n. */
            --writePos;
        }

        fseek(file, writePos, SEEK_SET);
        fputc(c, file);
        writePos = ftell(file);

        lastC = c;
    }

    ftruncate(fileno(file), writePos); /* Not in C89/C99/ANSI! */

    fclose(file);

    /* 'cus I'm too lazy to make a loop. */
    if(argc > 2)
        main(argc - 1, argv - 1);

    return 0;
}
5
ответ дан 8 December 2019 в 04:10
поделиться

Ftp это от поля DOS, к полю Unix, как файл ASCII, вместо двоичного файла. Ftp разделит crlf и вставит lf. Возвратите его к полю DOS как двоичный файл, и lf будет сохранен.

1
ответ дан 8 December 2019 в 04:10
поделиться
tr -d '^M' < infile > outfile

Вы введете ^M как: ctrl+V, Войти

Править: Можно использовать '\r' вместо того, чтобы вручную ввести возврат каретки, [благодаря @strager]

tr -d '\r' < infile > outfile

Редактирование 2: 'TR' является утилитой Unix, можно загрузить собственную версию для Windows с http://unxutils.sourceforge.net [благодаря @Rob Kennedy] или использовать эмуляцию Unix cygwin.

4
ответ дан 8 December 2019 в 04:10
поделиться

Некоторые текстовые редакторы, такие как UltraEdit/UEStudio имеют эту встроенную функциональность.

File > Conversions > DOS to UNIX

1
ответ дан 8 December 2019 в 04:10
поделиться

Если это - всего один файл, я использую блокнот ++. Хороший, потому что это свободно. Я имею установленный cygwin и использую один сценарий лайнера, который я записал для нескольких файлов. Если Ваш интерес к сценарию оставляет комментарий. (Я не имею его в наличии для меня в этот момент.)

-2
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: