Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   write to txt. В определенную строку!!! (https://javascript.ru/forum/misc/34198-write-txt-v-opredelennuyu-stroku.html)

Maxfashko 24.12.2012 06:13

write to txt. В определенную строку!!!
 
Здравствуйте!

Создаю эту тему второй раз, так как в первой мне не смогли ответить.

Мне необходимо сделать запись в txt файл в определённую строку (в конец)


Вот код, который считывает определённую строку отмеченную знаком
А в неё мне нужно сделать запись.
Именно в текстовик! Так как запись будет читать другая программа

код открывает текстовик данного вида
1015\t9999\t10x15
3000\t8789\t10x15
и т.д

и проставляет вместо первой табуляции любой знак ("DoneMark")
далее переходит на след строку, и удаляя старый, снова ставит знак
для того чтобы отметить выполняемую в данный момент строку

У меня возникла острая нужда дописать в текущую выполняемую строку через знак \t один символ.

чтобы получилось данное:
1015\t9999\t10x15\tV


Прошу помощи у знатоков.



var separator ='\t'

var doneMark ='>'


istFile.open("e", "TEXT", "????");

 

// ищем последнее выполненную строчку, отмеченную знаком ">"

do {

    var previousPos = listFile.tell();

    currentLine = listFile.readln();

    var currentPos = listFile.tell();

    var seekDelta = currentPos - previousPos - currentLine.length;

} while(!listFile.eof && currentLine.search(doneMark) < 0);

 

// запоминаем, добрались ли мы до конца файла (т.к. в дальнейшем будем пользоваться сдвигом, и .eof может поменять значение)
 
var endOfFile = false;

if (listFile.eof) endOfFile = true;

 

if (currentLine.search(doneMark) > 0) {

// если в файле найден знак ">"

// заменяем его на пробел

    var signPos = currentLine.indexOf(doneMark) - currentLine.length - seekDelta;

    listFile.seek(signPos, 1);

    listFile.write(separator);

};

 

// если мы уперлись в конец файла, сдвигаемся в начало

if (endOfFile) {

    listFile.seek (0,0);

    previousPos = 0 }

else {

// если не уперлись в конец файла, сдвигаемся в конец строки

    previousPos = currentPos;

    listFile.seek(- signPos - 1, 1);};

     

// считываем строчку, с которой будем работать

currentLine = listFile.readln();

 

currentPos = listFile.tell();

seekDelta = currentPos - previousPos - currentLine.length;

 

// заменяем в рабочей строке пробел на знак ">"

var signPos = currentLine.indexOf(separator) - currentLine.length - seekDelta;

listFile.seek(signPos, 1);

listFile.write(doneMark);
// где-то вот здесь необходимо сделать запись

               

 

 

 

// закрываем текстовик

 listFile2.close();


Пробовал сделать так

var XPos =currentLine.length;
listFile.seek(XPos, 1);
listFile.write('V');


Но пишет не совсем в конец строки

godofjavascript 24.12.2012 11:29

Цитата:

Сообщение от Maxfashko
Создаю эту тему второй раз, так как в первой мне не смогли ответить.

ахха ипать ты логичный.

а какой браузер ты используешь или какой движок? Где выполняется вообще этот код?

что такое istFile ?

Maxfashko 24.12.2012 11:54

это не браузерный js

Выполняется он в Ps (Да и это не важно собственно)

ListFile это txt

godofjavascript 24.12.2012 12:46

А, это дополняшка на фотошоп)? ясно) щас посмотрим код.

upd1:

так если хочешь чтобы я те помог пришли ВЕСЬ код я запущу его в фотошопе и посмотрю что не так.

п.с. что у тя не работает то кстати? в чем прбелма то?

Maxfashko 24.12.2012 13:00

Все работает, все ок.
Нужно дописать в txt символ. см выше описание()

я пришлю код который отвечает за открытие txt, так как вся у меня проблема с ним.
Не могу дописать символ в строку txt
Сам код ничего не значит для Ps без файлов, фотографий, путей и psd исходников. Всё я присылать не вижу смысла, так как самое нужное ниже:

Тут нужен хотя бы тулкит

вот код
var workFolderName = 'D:\\work\\Script';
var listFileName = 'VAR.txt';
var separator = '\t';
var doneMark = '>'
var currentLine = "";

var workFolder =  new Folder(workFolderName);
var listFile = File (workFolder+ "/" + listFileName);




/ открываем тектовый файл для редактирования
listFile.open("e", "TEXT", "????");

// ищем последнее выполненную строчку, отмеченную знаком ">"
do {
	var previousPos = listFile.tell();
	currentLine = listFile.readln();
	var currentPos = listFile.tell();
	var seekDelta = currentPos - previousPos - currentLine.length;
} while(!listFile.eof && currentLine.search(doneMark) < 0);

// запоминаем, добрались ли мы до конца файла (т.к. в дальнейшем будем пользоваться сдвигом, и .eof может поменять значение)

var endOfFile = false;
if (listFile.eof) endOfFile = true;

if (currentLine.search(doneMark) > 0) {
// если в файле найден знак ">"
// заменяем его на пробел
	var signPos = currentLine.indexOf(doneMark) - currentLine.length - seekDelta;
	listFile.seek(signPos, 1);
	listFile.write(separator);
};

// если мы уперлись в конец файла, сдвигаемся в начало
if (endOfFile) {
	listFile.seek (0,0);
	previousPos = 0 } 
else {
	previousPos = currentPos;
	listFile.seek(- signPos - 1, 1);};
	
// считываем строчку, с которой будем работать
currentLine = listFile.readln();

currentPos = listFile.tell();
seekDelta = currentPos - previousPos - currentLine.length;

// заменяем в рабочей строке пробел на знак ">"
var signPos = currentLine.indexOf(separator) - currentLine.length - seekDelta;
listFile.seek(signPos, 1);
listFile.write(doneMark);

// делаем запись в конец currentLine через табуляцию

godofjavascript 24.12.2012 13:12

меня вот эта строчка интересовала на самом деле

var listFile = File (workFolder+ "/" + listFileName);


так ща глянем

все просто как 2 пальца об песца
var workFolderName = 'C:\\';
var listFileName = 'VAR.txt';

var workFolder =  new Folder(workFolderName);
var listFile = File (workFolder+ "/" + listFileName);

// открываем тектовый файл для редактирования
listFile.open("e", "TEXT", "????");

// добавляем в конец однерку
listFile.write("1");
// потом добавляем в конец еще и двойку
listFile.write("2");

// закрываем файл
listFile.close();

godofjavascript 24.12.2012 13:32

а, так понял, тепе надо в конец определенной строки, прочитал не внимательно, щас сделаем)

godofjavascript 24.12.2012 13:50

Давай так, напишу функцию где указываешь номер строки и символ который туда вбить в конец, норм ?

Maxfashko 24.12.2012 14:04

В том то и дело)

текущую строку определяет сам скрипт ( я не знаю какая строка в данный момент обрабатывается, только когда открываю txt и вижу (donemark) на месте первой табуляции)

Ты хочешь чтобы я сам указывал номер строки?

godofjavascript 24.12.2012 14:48

а скажи что ты хочешь?

godofjavascript 24.12.2012 15:00

например seek меняет позицию каретки tel возвращает текущую позицию каретки. строки разделяются символом \n

и.т.п.

Maxfashko 24.12.2012 15:01

записать к currentLine в listFile символ
к текущей выполняемой строке в текстовый сделать запись

godofjavascript 24.12.2012 15:01

Цитата:

Сообщение от Maxfashko
записать к currentLine в listFile символ
к текущей выполняемой строке в текстовый сделать запись


godofjavascript 24.12.2012 15:02

блин может те справку дать почитать а)? кликабильно

Maxfashko 24.12.2012 15:23

я хочу чтобы в txt было вот это

было так
1010>1012\t10*15

стало так

1010(вместо "\t" стоит ">" следовательно эта строка выполняется)1020\t10*15(а вот тут мне нужен записанный символ)

godofjavascript 24.12.2012 15:42

Цитата:

Сообщение от Maxfashko
вместо "\t" стоит ">" следовательно эта строка выполняется

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

например так:

у меня есть открытый текстовый файл, я хочу уметь находить а нем определенынй символ, и в конец строки в которой найден этот символ добавлять какое то слово)) как это сделать?

вот типа того, я ДО СИХ ПОР не могу понять что ты хочешь.

Maxfashko 24.12.2012 15:56

ок,

нужно найти в txt определённый символ в строке, и дописать в конец строки в файл символ

В том и вопрос, КАК ЗАПИСАТЬ =)

godofjavascript 24.12.2012 16:30

И ВСЕ)???

а символ этот искомый один раз встречается в txt шнике или много раз)?

godofjavascript 24.12.2012 16:34

Цитата:

Сообщение от Maxfashko
В том и вопрос, КАК ЗАПИСАТЬ =)

1) найти искомый символ
2) найти первый символ переноса строки (\n) идущий от места нахождения искомого символа (из пункта 1).
3) установить каретку перед найденным символом переноса строки (из пункта 2) file.seek(число)
4) написать туда что хотим file.write('это вставиться в позицию каретки')

Maxfashko 24.12.2012 17:53

Один раз
Это все

godofjavascript 24.12.2012 18:54

ну что решение помогло? или мне код написать?

Maxfashko 25.12.2012 03:12

Лучше напиши, пожалуйста.


Часовой пояс GMT +3, время: 13:18.