1 (изменено: red2881, 2014-11-09 12:18:52)

Тема: AHK: FileAppend добавление текста в первую строку

Добрый день!
Как сделать добавление текста в файле в первую строку, все остальные сдвигались вниз.

^1::
FileAppend, %Clipboard% `n , C:\123.txt

2

Re: AHK: FileAppend добавление текста в первую строку

Прочитать файл в переменную. Удалить файл. Записать в файл первую строку. Добавить всё остальное.

3 (изменено: red2881, 2014-11-09 12:40:07)

Re: AHK: FileAppend добавление текста в первую строку

неужто нет как FileReadLine

^1::
 FileReadLine, OutputVar,  C:\123.txt, 1

4

Re: AHK: FileAppend добавление текста в первую строку

FileAppendLineAtStart? Не, нету.

5

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:

FileAppendLineAtStart? Не, нету.

Если есть возможность дайте пожалуйста ссылку.

6

Re: AHK: FileAppend добавление текста в первую строку

Ссылку на что?

7

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:

FileAppendLineAtStart? Не, нету.

вопрос про это.

8

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:

Прочитать файл в переменную. Удалить файл. Записать в файл первую строку. Добавить всё остальное.

Не так всё просто, как кажется. Нужно учесть два момента:
1. Какой вид переноса строки используется в файле.
2. Кодировку исходного файла.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: FileAppend добавление текста в первую строку

red2881 пишет:
YMP пишет:

FileAppendLineAtStart? Не, нету.

вопрос про это.

Ссылку на то, чего нету? Это как?

10

Re: AHK: FileAppend добавление текста в первую строку

teadrinker пишет:
YMP пишет:

Прочитать файл в переменную. Удалить файл. Записать в файл первую строку. Добавить всё остальное.

Не так всё просто, как кажется. Нужно учесть два момента:
1. Какой вид переноса строки используется в файле.
2. Кодировку исходного файла.

Это уже темы для следующих вопросов. Возможно, они и не возникнут, так зачем голову забивать?

11

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:
red2881 пишет:
YMP пишет:

FileAppendLineAtStart? Не, нету.

вопрос про это.

Ссылку на то, чего нету? Это как?

Понятно. 

Прочитать файл в переменную. Удалить файл. Записать в файл первую строку. Добавить всё остальное.

Т.е  это единственный вариант  как можно произвести запись текста в первую строку сдвинув вниз все остальные

12 (изменено: red2881, 2014-11-09 16:20:17)

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:

Не, нету.

прочитал  как двойное отрицание и пошел искать по форуму. Минус на минус дает плюс )))

13

Re: AHK: FileAppend добавление текста в первую строку

red2881, обратите внимание, мы используем заглавные буквы в начале предложений и точки в конце.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: FileAppend добавление текста в первую строку

red2881 пишет:

Т.е  это единственный вариант  как можно произвести запись текста в первую строку сдвинув вниз все остальные

Ну а как иначе вы сдвинете? Считываете содержимое файла в память, потом пишете обратно уже со сдвигом.

Можно использовать объект File, там не нужно будет файл удалять, но в остальном та же логика.

15

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:

так зачем голову забивать?

Я думал, ты перфекционист.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: FileAppend добавление текста в первую строку

YMP пишет:
red2881 пишет:

Т.е  это единственный вариант  как можно произвести запись текста в первую строку сдвинув вниз все остальные

Ну а как иначе вы сдвинете? Считываете содержимое файла в память, потом пишете обратно уже со сдвигом.

Можно использовать объект File, там не нужно будет файл удалять, но в остальном та же логика.

Понял. Спасибо.

17

Re: AHK: FileAppend добавление текста в первую строку

teadrinker пишет:

Я думал, ты перфекционист.

Местами.

18

Re: AHK: FileAppend добавление текста в первую строку

У самого встала задача писать логи и, конечно, думал что есть более красивое решение, чем затирать и создавать заново файл..

19

Re: AHK: FileAppend добавление текста в первую строку

Более красивое решение — использовать File Object.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: FileAppend добавление текста в первую строку

teadrinker

Не подскажите как например, этим способом, не пересоздавая файл заново заменить вторую строку в файле из 6 символов, строкой из 3?
Единственный показавшийся достойным способ:


file := FileOpen("Filename.txt", "rw")
file.Seek(StrLen(file.ReadLine()))
file.Write("123")

Перезаписывает первые три символа, оставляя остальную часть строки без изменений, а надо чтобы всё содержимое строки было заменено.

21

Re: AHK: FileAppend добавление текста в первую строку

Для такой задачи это не самый удобный метод, в любом случае придется читать файл целиком, чтобы сдвинуть остальную часть. Так что лучше считать файл обычным способом, заменить вторую строку, и переписать заново.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: FileAppend добавление текста в первую строку

KusochekDobra пишет:

Перезаписывает первые три символа, оставляя остальную часть строки без изменений, а надо чтобы всё содержимое строки было заменено.

Остаток пробелами заполнить?

23

Re: AHK: FileAppend добавление текста в первую строку

teadrinker
Понял, благодарю.

YMP
Пробелами нельзя. Нужно хранить хендлы окон запущенных ранее приложений, поэтому пробелы недопустимы. А перезапись нужна для обновления хендла. И вопрос сразу появился -> всегда ли номера хендлов из одинакового количества символов?

24

Re: AHK: FileAppend добавление текста в первую строку

Нужно хранить хендлы окон запущенных ранее приложений

IniRead почитайте.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: FileAppend добавление текста в первую строку

serzh82saratov
С текстом проще. По крайней мере в прошлом софте у меня так и было реализовано. Положил строки из файла в массив на старте, а если в процессе приходится хендл обновлять, то в помощь было 2 функции, одна удаляла строку со старым значением сдвигая все следующие вверх, а вторая вставляла в это же положение новое значение сдвигая строки от текущей обратно. С инишкой понятное дело, что даже нагляднее, но по совету teadrinker'a такая реализация всё же пришлась по душе:


ReWriteStr(txtAdress, strNmbr, newString) {
	Loop, Read, %txtAdress%
		workArr.Push(A_LoopReadLine)

	workArr[strNmbr] := newString

	file := FileOpen(txtAdress, "w", "UTF-8")

	strt := 1
	while (strt <= workArr.Length()) {
		new_str := % workArr[strt] "`r`n"
		file.Write(new_str)
		strt++
	}
}

Просто думал, что есть способ перезаписи строки в нужное состояние прямо в открытом файле без перезаписи всего файла. Но на нет и суда нет. А что по количеству символов в хендле, не подскажете, всегда ли оно одинаково? В предыдущем софте хендл указывался в десятичном формате и там это значение всегда было из одинакового количества знаков.

26

Re: AHK: FileAppend добавление текста в первую строку

С текстом проще

Вам виднее.

KusochekDobra пишет:

А что по количеству символов в хендле, не подскажете, всегда ли оно одинаково?

Нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

27

Re: AHK: FileAppend добавление текста в первую строку

serzh82saratov
Благодарю.

28

Re: AHK: FileAppend добавление текста в первую строку

KusochekDobra пишет:

Пробелами нельзя. Нужно хранить хендлы окон запущенных ранее приложений, поэтому пробелы недопустимы.

Так пробелы потом отбросить не проблема. Есть функция Trim.

29

Re: AHK: FileAppend добавление текста в первую строку

YMP но тогда надо знать максимально возможную длинну хендла и учитывать формат чисел.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

30

Re: AHK: FileAppend добавление текста в первую строку

Ну, можно выделить место под максимальное 64-битное целое в десятичном формате, больше-то никак не будет.

31 (изменено: serzh82saratov, 2016-05-25 20:15:33)

Re: AHK: FileAppend добавление текста в первую строку

Только проще наверное не пробелами а нулями, их потом не надо отбрасывать, или можно просто добавить ноль.

n := 1
MsgBox % Format("{:019d}", n)
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

32

Re: AHK: FileAppend добавление текста в первую строку

Да, так лучше.