Запись и дозапись в файл?..

  • Автор темы Автор темы Boyler
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Boyler

Участник
Топикстартер
Сообщения
50
Реакции
0
Пробовал сделать так:
PHP:
	do{
		myLine = myFile.readln();
		myNewFile.open("w");
		myNewFile.write(myLine + "\r"); 
 	} while(myFile.eof == false);
		myNewFile.close();
скрипт как и положено перебирает весь файл но происходит постоянная перезапись файла, т.е. в итоге получаем только последнюю строку!

Есть еще вопрос.
Как можно строку myLine после ее считывания конвертировать в Unicode приемлемый для русского языка?
Собственно для этого и считываю файл построчно.

Пробовал encode и decode, но они конвертирую в UTF-8.
При помещении такого текста в Инди выходит что-то типа:
"<ParaStyle:NormalObj> * ???‘? ? ?›???§??.. ???µ?». 8-333-232-00-96."

что не есть хорошо!

Сам "скрипт" очень сырой, много лишнего, важна сама идея:
PHP:
		myScriptFileName = app.activeScript;
		myScriptFile = File(myScriptFileName);
		myFolder = myScriptFile.parent;
		myFileName = myFolder + "/" + "test.txt";
		myFile = File(myFileName);
		//Try to open the file.
		myResult = myFile.open("r", undefined, undefined);
		//alert (myResult);
		//myDecodeLine = myResult.decode();
		
		myPath = app.activeScript; 
		myParts = myPath.toString().split("/"); 
		myParts[(myParts.length - 1)] = "text.txt"; 
		myNewPath = myParts.join("/"); 
		myNewFile = File(myNewPath); 
		if (myNewFile.exists) { 
 		// File Exists, so make length zero 
 		myNewFile.length = 0; 
		} else { 
 		// File Needs to be created 
 		new File(myNewFile); 
		} 

	do{
		myLine = myFile.readln();
		myNewFile.open("w");
		myNewFile.write(myLine + "\r"); 
 	} while(myFile.eof == false);
		myNewFile.close();
 
Ответ: Запись и дозапись в файл?..

Я что-то не свосем пойму, зачем этот скрипт и что он делает? Если это попытка помещать текст Dos, то дохлый номер.
 
Ответ: Запись и дозапись в файл?..

Oleg Butrin сказал(а):
Я что-то не свосем пойму, зачем этот скрипт и что он делает? Если это попытка помещать текст Dos, то дохлый номер.
Не, не то!
Есть у меня программа для набора объявлений написанная в VB, итог программы - текстовый файл в кодировке ANSI размеченный тэгами Инди под Unicod (иначе не получается):
<UNICODE-WIN>
<Version:3.000000><FeatureSet:InDesign-Roman><ColorTable:=<Paper:COLOR:CMYK:Process:0.000000,0.000000,0.000000,0.000000><Black:COLOR:CMYK:Process:0.000000,0.000000,0.000000,1.000000>>
<DefineParaStyle:Rubrika=<Nextstyle:Rubrika><cColor:Paper><cSize:6.000000><cCase:All Caps><cLeading:6.500000><cLanguage:Russian><pSpaceBefore:1.417323><cFont:FreeSetBlackC><pRuleAboveColor:Black><pRuleAboveStroke:6.000000><pRuleAboveOffset:-0.850394><pRuleAboveOn:1><pTextAlignment:Center><pHyphenationWeight:0>>
<DefineParaStyle:PodRubrika=<Nextstyle:PodRubrika><cTypeface:Bold><cSize:6.000000><cCase:All Caps><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pRuleAboveColor:Black><pRuleAboveStroke:6.000000><pRuleAboveTint:40.000000><pRuleAboveOffset:-0.850394><pRuleAboveOn:1><pTextAlignment:Center><pHyphenationWeight:0>>
<DefineParaStyle:NormalObj=<Nextstyle:NormalObj><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<DefineParaStyle:BoldObj=<Nextstyle:BoldObj><cTypeface:Bold><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<DefineParaStyle:Ramka=<Nextstyle:Ramka><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<DefineParaStyle:RamkaBold=<Nextstyle:RamkaBold><cTypeface:Bold><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<DefineParaStyle:BlackRamNormal=<Nextstyle:BlackRamNormal><cColor:Paper><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<DefineParaStyle:BlackRamBold=<Nextstyle:BlackRamBold><cColor:Paper><cTypeface:Bold><cSize:6.000000><cLeading:6.500000><cLanguage:Russian><cFont:PragmaticaC><pHyphenationWeight:0>>
<ParaStyle:Rubrika>Недвижимость
<ParaStyle:PodRubrika>Продам
<ParaStyle:NormalObj> * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!. Тел. 123-123.
<ParaStyle:NormalObj> * 123. 123. Тел. 123.
<ParaStyle:BoldObj> * 123. 123. Тел. 123.
<ParaStyle:NormalObj> * 123. 123.
<ParaStyle:Ramka> * 123. 123. Тел. 123.
<ParaStyle:NormalObj> * 222. 222. Тел. 222.
<ParaStyle:NormalObj> * 222. 222. Тел. 223.
<ParaStyle:PodRubrika>Сниму
Штатными средствами VB в Unicode кодирует не удачно, т.е. в Инди такой текст не помещается! В CE все было проще!
Вот появилась мысля - может Инди для себя перекодирует нормально?

PS: Извиняюсь если не отвечу, рабочий день кончился, офис закрывают!
 
Ответ: Запись и дозапись в файл?..

А не было мысли считать файл в массив строк, перекодировать массив и записать его в тот же файл?
 
Ответ: Запись и дозапись в файл?..

Oleg Butrin сказал(а):
А не было мысли считать файл в массив строк, перекодировать массив и записать его в тот же файл?

:confused: Нет. Не было... Буду пробовать, спасибо!
Вот этой мысли и не хватало...
 
Ответ: Запись и дозапись в файл?..

Я хочу добавить еще одну проблему с кодировкой. Как известно InDesign делит шрифты установленные в системе на две группы: 1 группа – "правильные" (по мнению Id) шрифты и 2 группа – неправильные (типа кириллические и др.). Так вот, если набрать текст шрифтом из 1 группы, выделить его и назначить шрифт из второй группы, то можно увидеть вместо русских букв крякозяблики, но если опять набрать текст с клавиатуры, то получается все нормально. По-моему это проблема из той же песни, что у автора этой темы! Поэтому я хочу написать скрипт чтобы как-будто перенабрать текст с клавы, но делать естественно должен скрипт. Написал в этот форум потому, что не знаю, по-какому алгоритму осуществлять перекодировку символов.
 
Ответ: Запись и дозапись в файл?..

> Как известно InDesign делит шрифты установленные в системе на две группы:

На большее число групп: Roman, Cyrillic, China, Japan и т.д.

Шрифты, о которых ты говоришь, идентифицируются InD как не относящиеся ни к одной из языковых групп, скорее всего как Symbol.

> , но если опять набрать текст с клавиатуры, то получается все нормально.

И этот текст потом не воспринимается расстановщиков переносов и программой проверки орфографии как осмысленный текст, а как бессмысленный набор символов. Потому ни проверка орфографии, ни расстановка переносов на таком тексте работать не будут.

> написать скрипт чтобы как-будто перенабрать текст с клавы

Шрифты надо лечить, и всё будет нормально переключаться без костылей.
 
Ответ: Запись и дозапись в файл?..

ogursoft сказал(а):
>По-моему это проблема из той же песни, что у автора этой темы!
Да нет, у меня немного другая проблема! Мне просто из ANSI надо перевести в Unicode минуя Блокнот!

Shlyapa сказал(а):
>Шрифты надо лечить, и всё будет нормально переключаться без костылей.
Shlyapa, ты конечно прав, но до сих пор никто так и не знает как это правильно сделать!
Я например со своей стороны делал это чисто интуитивно, шрифты (PostScript) у нас в городе у всех обсолютно одинаковые с 1995-97 годов.
Мне пришлось вручную перелопатить около 400 (!) шрифтов, т.к. FontLab сам переименовывать глифы почему-то не умеет :( , а может я не умею...
Но в любом случае ID ругаться меньше стал! Это факт!
 
Ответ: Запись и дозапись в файл?..

В общем лажа полная! ID сохраняет файлы в кодировке UTF-8!
Что для меня не приемлемо! Жаль.

И все-таки интересует вопрос: может ли Indisign дописывать в текстовый файл?
 
Ответ: Запись и дозапись в файл?..

Код:
myFile.open("e");
 
Ответ: Запись и дозапись в файл?..

Boyler сказал(а):
Да нет, у меня немного другая проблема! Мне просто из ANSI надо перевести в Unicode минуя Блокнот

И решил привлечь InD? Не крупноват ли калибр, особенно в сравнении с Блокнотом, которого ты решил не привлекать?

Boyler сказал(а):
но до сих пор никто так и не знает как это правильно сделать!

Да?

Boyler сказал(а):
Мне пришлось вручную перелопатить около 400 (!) шрифтов,

Я перелопачивал примерно в три раза больше.

Boyler сказал(а):
т.к. FontLab сам переименовывать глифы почему-то не умеет :( , а может я не умею...

Это ты о каком FontLab-е?
 
Ответ: Запись и дозапись в файл?..

2 Oleg Butrin:
В очередной раз спасибо! Нашел, с твоей помощью!
e (edit) Opens an existing file for reading and writing.

4Shlyapa:
Shlyapa сказал(а):
И решил привлечь InD? Не крупноват ли калибр, особенно в сравнении с Блокнотом, которого ты решил не привлекать?
Я не вобще-то не программер, если есть другой вариант - приму с благоданостью!

Shlyapa сказал(а):
Это ты о каком FontLab-е?
Fontlab4.6 и TransType2.1
Или может у меня руки кривоваты? (в чем Я не особо сомневаюсь)
 
Ответ: Запись и дозапись в файл?..

Перевод в уникод с помощью VBS.
Ниже приведен листинг unicode.vbs, который конвертирует текстовые файлы в уникод.
PHP:
myDir = WScript.Arguments.UnNamed(0)
NewFile = "u"

Dim fs, f, f1, fc, s, SuperText
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(MyDir)
    Set fc = f.Files

    For Each f1 In fc
	outFile = myDir & newFile & f1.Name
	Set txtStream = fs.OpenTextFile(f1)
	Set outStream = fs.OpenTextFile(outFile, 2,  True, -1)
	Do While Not (txtStream.atEndOfStream)
		Text = txtStream.ReadLine
		SuperText = SuperText & Text &  vbCrLf
	Loop

	outStream.Write SuperText
    Next
    
    MsgBox "Готово!"
Текст, конвертированный этим скриптом, мною неоднократно помещался в ID CS. Этот скрипт собственно для этого и писался, чтобы понять как можно конвертировать текстовые файлы в уникод для ID CS, на его основе был сделан скрипт для конвертации файлов телепрограммы для газеты "Кемерово".
 
Ответ: Запись и дозапись в файл?..

Виталий, спасибо!..
...Попробую разобрать! :confused:
 
Ответ: Запись и дозапись в файл?..

Прошу прощения, что еще одну вещь не написал.
Скрипт работает со всей папкой, которая будет указана в аргументе.
То есть вызов скрипта должен быть примерно следующим:
unicode.vbs d:\my files
 
Статус
Закрыто для дальнейших ответов.