Что нового

Максимально возможная вставка

polzovatelau

Новичок
Сообщения
15
Репутация
0
Какой командой или способом возможно за раз вставить из одного в файла в другой наибольший блок данных ?
использовать посимвольно или построчно в цикле Filewrite Filewriteline для записи данных в другой файл занимает
много времени .

While $Size>0; при верном условии цикл повторяется
$Size=$Size-1
$x = FileReadLine($File1)
FileWriteLine($File2, $x)
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,401
Репутация
596
читать весь файл и дописать его данные в другой
Код:
FileOpen
FileRead
FileClose
 
Автор
P

polzovatelau

Новичок
Сообщения
15
Репутация
0
чуть не то
С командами типа Read ,Write
утомительно
Думаю может как то использовать
буфер с помощью команд

FileFlush($hFile).

Но возможно ли
скинуть в буфер весь файл (большой многостроковый блок данных)
а потом его вставить в другой но не в конце или
начале а в средине не используя write ln ?
 

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
При операциях чтения /записи в файл без Read / Write Вам не обойтись, чем они утоминельней, че какие-то другие функции ?
Думаю может как то использовать
буфер с помощью команд

FileFlush($hFile).
Вы читали что это за буфер и что это за функция вообще ?
Было бы понятней , если бы Вы предоставили примеры файлов и то, что хотите получить в результате выполнения скрипта.
 

joiner

Модератор
Локальный модератор
Сообщения
3,401
Репутация
596
чтение сразу нужно блока и вставить в нужную строку в конечном файле. либо через бинарное чтение и функции
Код:
FileSetPos
FileGetPos
 
Автор
P

polzovatelau

Новичок
Сообщения
15
Репутация
0
При операциях чтения /записи в файл без Read / Write Вам не обойтись, чем они утоминельней, че какие-то другие функции ?

Вы читали что это за буфер и что это за функция вообще ?
Было бы понятней , если бы Вы предоставили примеры файлов и то, что хотите получить в результате выполнения скрипта.
#cs
К вопрсу подготовил набор команд
есть файл "I:\ї.txt" с произвольным содержимым
jyuj1
jyuj2
.....
jyujN
есть другой файл "I:\2.txt" с произвольным содержимым
ukyu1
ukyu2
.....
ukyuN

после проведения операций

в файле "I:\ї.txt" например после позиции 2
должен быть вставлен блок данных файла "I:\2.txt"

jyukyu1
ukyu2
.....
ukyuNuj1
jyuj2
.....
jyujN



с помощью операторов типа FileWrite я это реализовал .
А вот можно ли как то без него 7
#ce

; сырой пример предпологаемый набор операторов команд
#include <Constants.au3>

$hFile1=FileOpen("I:\1.txt")
FileFlush($hFile1)
MsgBox(4096, "", "Позиция: " & FileGetPos($hFile1) & @CRLF & "Данные: " & @CRLF & FileRead($hFile1))
Local $n = FileSetPos($hFile1,2, $FILE_BEGIN)

$hFile2=FileOpen("I:\2.txt")
FileFlush($hFile2)
ClipPut(FileFlush($hFile2));???????????????????????????

MsgBox(4096, "", "Позиция: " & FileGetPos($hFile2) & @CRLF & "Данные: " & @CRLF & FileRead($hFile2))

ShellExecute("I:\ї.txt", "", "I:\ї.txt", "open")
WinWait("I:\ї.txt", "", 5)
Send("^!V")
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,162
Репутация
242
Вы неверно понимаете функцию "FileFlush" - она не является аналогом "FileWrite" , а её как бы принудительным завершением, в примере к "FileFlush" вроде бы ясно описано, посмотрите внимательно.
Все данные для записи в файл функцией "FileWrite" в открытом файле не записываются сразу на диск физически , а записываются по мере заполнения буфера , который имеет объём всего лишь 128 байт , последяя часть незаполненого полностью буфера записывается физически на диск в момент закрытия файла , вот что бы не дожидаться закрытия файла и принудительно записать остаток из буфера физически на диск и используется функция "FileFlush".
в файле "I:\ї.txt" например после позиции 2
По какому принципу определяется позиция вставки ?
 
Автор
P

polzovatelau

Новичок
Сообщения
15
Репутация
0
file
Вы неверно понимаете функцию "FileFlush" - она не является аналогом "FileWrite" , а её как бы принудительным завершением, в примере к "FileFlush" вроде бы ясно описано, посмотрите внимательно.
Все данные для записи в файл функцией "FileWrite" в открытом файле не записываются сразу на диск физически , а записываются по мере заполнения буфера , который имеет объём всего лишь 128 байт , последяя часть незаполненого полностью буфера записывается физически на диск в момент закрытия файла , вот что бы не дожидаться закрытия файла и принудительно записать остаток из буфера физически на диск и используется функция "FileFlush".

По какому принципу определяется позиция вставки ?
для начала мне важна была сама возможность реализации вставки блока данных не используя FileWrite а должен был быть это FileFlush или какой то другой оператор я как раз не знаю .А по номеру позиции в файле или значению кода для меня пока это не очень важно .
Может использовать ClipPut и ClipGet ?
 

InnI

AutoIT Гуру
Сообщения
4,555
Репутация
1,257
возможность реализации вставки блока данных
Файлы у вас текстовые. Вот и работайте с их содержимым, как с обычным текстом. А когда получите нужный результат - делайте с ним, что хотите. Хоть в файл сохраняйте, хоть по сети передавайте
Код:
; читаем содержимое файлов
$Text1 = FileRead("1.txt")
$Text2 = FileRead("2.txt")

; берём 2 символа первого файла
$Buffer = StringLeft($Text1, 2)
; добавляем содержимое второго файла
$Buffer &= $Text2
; добавляем остаток первого файла
$Buffer &= StringTrimLeft($Text1, 2)
; проверяем результат
ConsoleWrite($Buffer & @CRLF)
MsgBox(0, "Buffer", $Buffer)

; сохраняем в файл или в буфер обмена
FileWrite("3.txt", $Buffer)
ClipPut($Buffer)
 

InnI

AutoIT Гуру
Сообщения
4,555
Репутация
1,257
Почему-то принципиально нужно именно без "FileWrite"...
Думаю, он просто хочет с файлами в памяти поработать. Без сохранения на диск. Но не может это объяснить.
Подождём реакции на мой пример и там, надеюсь, поймём, что ему надо.
 
Автор
P

polzovatelau

Новичок
Сообщения
15
Репутация
0
Почему-то принципиально нужно именно без "FileWrite"...

polzovatelau , просто интересно , чем Вас не устраивает эта функция ?
Все просто .Функция FileWrite оказывается очень хорошая . Просто в своей программе в циклах
я использовал FileRead("...", 1) ( чтение по одному символу ) соответственно и FileWrite делал посимвольно (Для операций удаления поиска и замены этого было достаточно .
Для вставки блока занимало много времени ).Зациклился на этом .Кроме того не понял-забыл что FileRead читает файл целиком .После совета и примера Гуру пришло просветление .Оказывается я не той дорогой шел .Гуру еще прав в том что я просто хочу поработать с файлами . (Правда не настолько профессионально чтобы сразу в памяти без сохранения на диск )
Сообщение автоматически объединено:

Файлы у вас текстовые. Вот и работайте с их содержимым, как с обычным текстом. А когда получите нужный результат - делайте с ним, что хотите. Хоть в файл сохраняйте, хоть по сети передавайте
Код:
; читаем содержимое файлов
$Text1 = FileRead("1.txt")
$Text2 = FileRead("2.txt")

; берём 2 символа первого файла
$Buffer = StringLeft($Text1, 2)
; добавляем содержимое второго файла
$Buffer &= $Text2
; добавляем остаток первого файла
$Buffer &= StringTrimLeft($Text1, 2)
; проверяем результат
ConsoleWrite($Buffer & @CRLF)
MsgBox(0, "Buffer", $Buffer)

; сохраняем в файл или в буфер обмена
FileWrite("3.txt", $Buffer)
ClipPut($Buffer)
Спасибо за простой и ясный ответ !
 
Последнее редактирование:
Верх