Существуют ответы, но трудно быть общим, не зная детали проблемы.
я принимаю 32-разрядный Windows XP.
Стараются не требоваться 100 с МБ непрерывной памяти, если Вы будете неудачны, то несколько случайных dlls загрузят себя в точках inconventient через Ваше доступное адресное пространство, быстро сокращающее очень большие площади непрерывной памяти. В зависимости от того, в каких API Вы нуждаетесь, это может быть довольно трудно предотвратить. Может быть довольно удивительно, как просто выделение нескольких блоков 400 МБ памяти в дополнение к некоторому 'нормальному' использованию памяти может оставить Вас с нигде не выделить заключительный 'небольшой' блок 40 МБ.
, С другой стороны, действительно предварительно выделите разумные блоки размера за один раз. Из порядка приблизительно 10 МБ хороший размер блока компромисса. Если можно удаться разделить данные в этот вид блоков размера, Вы сможете заполнить адресное пространство обоснованно эффективно.
, Если Вы все еще собираетесь закончиться адресное пространство, Вы испытываете необходимость, чтобы смочь разбить на страницы блоки в и на основе своего рода алгоритма кэширования. Выбор правильных блоков к странице собирается зависеть очень от Вашей обработки algortihm и будет нуждаться в тщательном анализе.
Выбор, где разбить на страницы вещи к, является другим решением. Вы могли бы решить просто записать им во временные файлы. Вы могли также исследовать Работу с окнами Адреса Microsoft Extenstions API. В любом случае необходимо быть осторожными в проектировании приложений для чистки любых указателей, которые указывают на что-то, что собирается быть разбитым на страницы, иначе действительно плохие вещи (TM) произойдут.
Удачи!
tr ' ' ',' <input >output
Заменяет каждый пробел запятой, при необходимости вы можете передать его с флагом -s (сжатие повторов), который заменяет каждую входную последовательность повторяющегося символа, указанного в SET1 ( пробел) с одним вхождением этого символа.
Использование повторений сжатия, используемых после замены табуляции:
tr -s '\t' <input | tr '\t' ',' >output
Попробуйте что-нибудь вроде:
sed 's/[:space:]+/,/g' orig.txt > modified.txt
Символьный класс [: space:] будет соответствовать всем пробелам (пробелы, табуляции и т. Д.). Если вы просто хотите заменить один символ, например. просто пробел, используйте только его.
РЕДАКТИРОВАТЬ: На самом деле [: space:] включает возврат каретки, так что это может не сделать то, что вы хотите. Следующие символы заменят табуляции и пробелы.
sed 's/[:blank:]+/,/g' orig.txt > modified.txt
как
sed 's/[\t ]+/,/g' orig.txt > modified.txt
Во всем этом вам нужно быть осторожным, чтобы элементы в вашем файле, разделенные пробелами, не содержали своих собственных пробелов, которые вы хотите сохранить, например. два слова.
без просмотра входного файла, только предположение
awk '{$1=$1}1' OFS=","
перенаправляет в другой файл и переименовывает его по мере необходимости
А что насчет чего-то вроде этого:
cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt
(Да, с некоторой бесполезной привязкой и конвейером; я полагаю, можно также использовать <для чтения из файла напрямую - сначала использовал cat для вывода содержимое файла, и только после этого я добавил sed в мою командную строку)
РЕДАКТИРОВАТЬ: как @ ghostdog74 указал в комментарии, определенно нет необходимости в cat / pipe; вы можете указать имя файла в sed:
sed -e 's/\s/,/g' texte.txt > texte-new.txt
Если "texte.txt" имеет следующий формат:
$ cat texte.txt
this is a text
in which I want to replace
spaces by commas
Вы получите "texte-new.txt", который будет выглядеть так:
$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas
I не пойдет просто заменить старый файл новым (можно сделать с помощью sed -i, если я правильно помню; и, как сказал @ ghostdog74, этот файл согласился бы создавать резервную копию на лету) : хранить может быть мудро, в качестве меры безопасности (даже если это означает необходимость переименовать его во что-то вроде "texte-backup.txt")
Эта команда должна работать:
sed "s/\s/,/g" < infile.txt > outfile.txt
Обратите внимание, что вы должны перенаправить вывод в новый файл. Входной файл не изменяется на месте.
sed может сделать это:
sed 's/[\t ]/,/g' input.file
Это отправит на консоль,
sed -i 's/[\t ]/,/g' input.file
отредактирует файл на месте