Текстовые файлы - как программно имитировать открытие в Wordpad и переписывание в виде обычного текста [дубликат]

Другим вариантом, если производительность является проблемой, является использование расширения data.table для расширения reshape2 расплава & amp; dcast functions

( Ссылка: эффективная перестройка с использованием data.tables )

library(data.table)

setDT(dat1)
dcast(dat1, name ~ numbers, value.var = "value")

#          name          1          2         3         4
# 1:  firstName  0.1836433 -0.8356286 1.5952808 0.3295078
# 2: secondName -0.8204684  0.4874291 0.7383247 0.5757814

И, как и в data.table v1.9.6, мы можем использовать несколько столбцов

## add an extra column
dat1[, value2 := value * 2]

## cast multiple value columns
dcast(dat1, name ~ numbers, value.var = c("value", "value2"))

#          name    value_1    value_2   value_3   value_4   value2_1   value2_2 value2_3  value2_4
# 1:  firstName  0.1836433 -0.8356286 1.5952808 0.3295078  0.3672866 -1.6712572 3.190562 0.6590155
# 2: secondName -0.8204684  0.4874291 0.7383247 0.5757814 -1.6409368  0.9748581 1.476649 1.1515627

35
задан dbkk 26 June 2011 в 17:14
поделиться

7 ответов

Будет ли это делать?

[^\r]\n

В основном это соответствует «\n», которому предшествует символ, который не является «\r».

Если вы этого хотите для обнаружения строк, которые начинаются с одного только «\n», а затем попробуйте

([^\r]|$)\n

, который говорит, что он должен соответствовать «\n», но только те, которые являются первым символом строки или те, которые являются not , которым предшествует «\r»

. Могут быть специальные случаи для проверки, поскольку вы возитесь с определением самих строк, «$» может не работать слишком хорошо.

EDIT: credit @Kibbee Использование look-forward s явно лучше, поскольку оно не будет захватывать соответствующий предыдущий символ и также поможет с любыми случаями краев. Итак, вот лучшее регулярное выражение + код становится:

myStr = Regex.Replace(myStr, "(?<!\r)\n", "\r\n");
42
ответ дан neural5torm 22 August 2018 в 07:07
поделиться
  • 1
    Это не будет работать, если строка начинается с & quot;\n & quot ;. – Joel B 29 December 2011 в 00:52
  • 2
    не работает для\n\n – Jerome 2 May 2014 в 21:45
  • 3
    Должно быть myStr = Regex.Replace (myStr, & quot; (& lt; \\\r)\n & quot ;, & quot;\r\n & quot;); – mcfroob 30 January 2017 в 07:31
myStr.Replace("([^\r])\n", "$1\r\n");

$ может потребоваться \

1
ответ дан Chris Marasti-Georg 22 August 2018 в 07:07
поделиться

Если я знаю, что окончание строк должно быть одним из CRLF или LF, то что-то, что работает для меня, это

myStr.Replace("\r?\n", "\r\n");

Это по сути делает тот же ответ neslekkiM , за исключением он выполняет только одну операцию замены на строке, а не на две. Это также совместимо с двигателями Regex, которые не поддерживают отрицательные обратные ссылки или обратные ссылки.

1
ответ дан Community 22 August 2018 в 07:07
поделиться

Попробуйте следующее: Замените (Char.ConvertFromUtf32 (13), Char.ConvertFromUtf32 (10) + Char.ConvertFromUtf32 (13))

1
ответ дан Ico 22 August 2018 в 07:07
поделиться

Это может быть быстрее, если вы используете это.

(?<!\r)\n

Он в основном ищет любой\n, которому не предшествует\r. Это, скорее всего, будет быстрее, потому что в другом случае почти каждая буква соответствует [^\r], поэтому она будет захватывать это, а затем искать\n после этого. В примере, который я дал, он остановится только тогда, когда он найдет\n, и перед этим посмотрим, найдет ли он\r

55
ответ дан Kibbee 22 August 2018 в 07:07
поделиться

Я предполагаю, что «myStr» является объектом типа String, в этом случае это не регулярное выражение. \r и\n являются эквивалентами для CR и LF.

Мое лучшее предположение заключается в том, что, если вы знаете, что у вас есть строка\n для КАЖДОЙ, независимо от того, что вы сначала должны вырезать каждый \ р. Затем замените все\n на\r\n.

Ответ chakrit дает также идти, но тогда вам нужно использовать регулярное выражение, но так как вы не говорите, что такое «myStr» ...

Редактирование: просмотр других примеров говорит мне одно: почему сложные вещи, когда вы можете сделать это легко ?, Поскольку существует регулярное выражение, это не то же самое, что «нужно использовать»: D

Edit2: Инструмент очень полезен при игре с регулярным выражением, xpath и еще что-то, что дает вам странные результаты, могу ли я указать вам на: http://www.regexbuddy.com/

3
ответ дан neslekkiM 22 August 2018 в 07:07
поделиться

Я пытался сделать код ниже для строки и не работал.

myStr.Replace("(?<!\r)\n", "\r\n")

Я использовал Regex.Replace и работал

Regex.Replace( oldValue, "(?<!\r)\n", "\r\n")
12
ответ дан wanted 22 August 2018 в 07:07
поделиться
Другие вопросы по тегам:

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