Что нового

Зацените пожалуйста...

Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
snoitaleR сказал(а):
Bloodrinker
Для меня четвертый вариант воспринимается легче первых трех...
То есть, как я думаю, либо не должно быть лишних пробелов, либо пробелов должно быть столько, чтобы перевод был по одной вертикальной линии (имитация таблицы)...

я тоже так думаю, но вот как реализовать эту прямую вертикальную линию одинаковые пробелы модно получить клавишей TAB, т е вот из этого
Код:
a great many | множество;
a little | немного;
a lot of | много;
млжно получить это(точки не нужны, просто без них неудобно пробел регулировать)
Код:
or.....| или;
oral...| устный;
orange | апельсин, оранжевый;
orbit..| орбита;
клавишей tab, но это несовсем вертикальная линия... а так хотелось бы)
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Bloodrinker
Для текстового документа можно использовать кодировку CP-866...
Там есть символы псевдографики, в том числе и символ с вертикальной границей таблицы...
Других вариантов я не знаю...

Но я думаю, лучше остановиться на тире, так как вертикальная линия не способствует направлению взгляда по горизонтали, и можно легко сбиться...
 

SyDr

Сидра
Сообщения
651
Репутация
158
Как такой вариант?
http://slil.ru/28484777
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
А если сделать как в обычных словарях?
В них акцент внимания, делается выделением слова.
Очень даже нечего получается.

or или
oral устный
orange апельсин, оранжевый
orbit орбита
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
SyDr сказал(а):
Как такой вариант?
http://slil.ru/28484777

интересненько, но вот расстояние между переводом и самим английским словом довольно уж большое) или это просто изза настроек или раздерешия экрана?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Из-за convertible currency (21)

Всё. Вот моё последнее слово (CHM ведь нужен, верно?)
http://slil.ru/28485069
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker,
По поводу сортировки.
1 вариант сортирует содержимое по буквам и сохраняет результат в 25 файлах "буква.txt" :
Код:
#include <file.au3>

DirRemove(@ScriptDir & "\Result", 1)
DirCreate(@ScriptDir & "\Result")
$file = @ScriptDir & "\slovar.txt"
$file1 = @ScriptDir & "\Result\slovar.new.txt"


$sTest = FileRead($file)
$sTest = StringReplace(StringRegExpReplace($sTest, "[_*+0-9]", ""), "=", " - ")
$len = StringLen($sTest)
$sTest = StringLeft($sTest, $len)
FileWrite($file1, $sTest)

$CountLines = _FileCountLines($file1)

For $i = 1 To $CountLines
	$sTest = FileReadLine($file1, $i)
	$letter = StringLeft($sTest, 1)
	If $letter = "" Then ExitLoop
	FileWrite(@ScriptDir & "\Result\" & $letter & ".txt", $sTest & @CRLF)
Next
FileDelete($file1)
ConsoleWrite("Все готово!")


2 вариант сортирует содержимое по 60 слов и сохраняет результат в 90 файлах "цифра_урок.txt" :
Код:
#include <file.au3>

DirRemove(@ScriptDir & "\Result1", 1)
DirCreate(@ScriptDir & "\Result1")
$file = @ScriptDir & "\slovar.txt"
$file1 = @ScriptDir & "\Result1\slovar.new.txt"


$sTest = FileRead($file)
$sTest = StringReplace(StringRegExpReplace($sTest, "[_*+0-9]", ""), "=", " - ")
$len = StringLen($sTest)
$sTest = StringLeft($sTest, $len)
FileWrite($file1, $sTest)

$CountLines = _FileCountLines($file1)
$n = 1
For $i = 1 To $CountLines
	$sTest = FileReadLine($file1, $i)
	$letter = StringLeft($sTest, 1)
	If $letter = "" Then ExitLoop
	If mod($i, 60) = 0 Then
		$n +=1
	EndIf
	FileWrite(@ScriptDir & "\Result1\" & $n & "_урок.txt", $sTest & @CRLF)
Next
FileDelete($file1)
ConsoleWrite("Все готово!")

Только работают они почему-долго 30-40 секунд.

SyDr
Ваш последний вариант замечательный!
А как Вы его получили, если не секрет?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Я ленивый мазохист :laugh:
И вот почему:
1) С помощью Notepad++ удалил из файла все лишнии символы. ~1 минута
2) C помощью скрипта привёл файл к нужному виду:
Код:
#include <File.au3>
Global $File1
_FileReadToArray('slovar.txt', $File1)
For $x = 1 to $File1[0]
	$File1[$x] = '<tr><td>' & StringReplace($File1[$x], '=', '</td><td>') & '</td></tr>'
Next
_FileWriteFromArray('slovar2.txt', $File1)

3) Добавил в начало и конец файла оставшиеся теги. Сама табличка из справки к AuotIt бралась
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SyDr,

Красиво!
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
SyDr, я немного изменил ваш кодик, теперь вышло вот так ИМХО немного дружелюбнее, теперь вот загоняю все в формат CHM, скоро выложу и его)


Добавлено:
Сообщение автоматически объединено:

а вот и вариант в виде справки, какой и хотел)
вот собстно и он. просто тоже самое, потом разделю по 60 слов.

PS придирайтесь к самой мелочи, ко всему! просто охото сделать наиболее читабельным и глазанераздражающим)))

PPS как вам цвет фона? может изменить? а размеры?

в предыдущие 2 скрипта добавил еще
Код:
$sTest = StringReplace($sTest, ";", "")
иббо точка с запятой мне кажется некчему...
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
madmasles, есть 1-на небольшая заминка... когда твоим скриптом начинаю разделять слова на 90 файлов, то в 1-м 59 а в остальных как и должно быть - 60. почему так не могу понять... занимаюсь исправлением)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker
Это я в арифметике ошибся. Исправил. Так по 60 слов получается:
Код:
#include <file.au3>

DirRemove(@ScriptDir & "\Result1", 1)
DirCreate(@ScriptDir & "\Result1")
$file = @ScriptDir & "\slovar.txt"
$file1 = @ScriptDir & "\Result1\slovar.new.txt"


$sTest = FileRead($file)
$sTest = StringReplace(StringRegExpReplace($sTest, "[_*+;0-9]", ""), "=", " ")
$len = StringLen($sTest)
$sTest = StringLeft($sTest, $len)
FileWrite($file1, $sTest)

$CountLines = _FileCountLines($file1)
$n = 1
For $i = 1 To $CountLines
	$sTest = FileReadLine($file1, $i)
	$letter = StringLeft($sTest, 1)
	If $letter = "" Then ExitLoop
	If mod($i -1, 60) = 0 Then
		$n +=1
	EndIf
	FileWrite(@ScriptDir & "\Result1\" & $n-1 & "_урок.txt", $sTest & @CRLF)
Next
FileDelete($file1)
ConsoleWrite("Все готово!")

В этой строке:
Код:
$sTest = StringReplace(StringRegExpReplace($sTest, "[_*+;0-9]", ""), "=", " ")

вместо последнего пробела в кавычках " "), можно поставить тот знак, который заменит "=" между англ.словом и переводом, т.е "|", @TAB, @TAB & @TAB, и т.д. и т.п.
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
madmasles сказал(а):
Bloodrinker

В этой строке:
Код:
$sTest = StringReplace(StringRegExpReplace($sTest, "[_*+;0-9]", ""), "=", " ")

вместо последнего пробела в кавычках " "), можно поставить тот знак, который заменит "=" между англ.словом и переводом, т.е "|", @TAB, @TAB & @TAB, и т.д. и т.п.
насчет TAB незнал) надо попробовать...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker,
С @TAB, для того, чтобы отступ был у всех переводов одинаковый, надо организовать проверку длины англ. слова и, в зависимости от его длины, добавлять разное кол-во @TAB. Я по-позже попробую поэкспериментировать.

PS
Про @TAB я еще в 8 посте писал.
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
нуда... я понял для чего TAB а как вам первый CHM который залил? ничего, что табличкой? заливка на глаза не давит? а цвет как? или чтото изменить?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker
Очень симпатично. Может выделить англ. слова жирным шрифтом, как Garrett предложил?
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
madmasles сказал(а):
Bloodrinker
Очень симпатично. Может выделить англ. слова жирным шрифтом, как Garrett предложил?

незнаю... ща попробую... но думаю давить немного будут на глазки)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker,
Можно несколько вариантов сделать, на вкус и цвет - товарищей нет.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Bloodrinker,

Вот этим кодом:
Код:
#include <file.au3>

DirRemove(@ScriptDir & "\Result1", 1)
DirCreate(@ScriptDir & "\Result1")
$file = @ScriptDir & "\slovar.txt"
$n1_7 = @TAB & @TAB & @TAB
$n8_15 = @TAB & @TAB
$n16_24 = @TAB

$CountLines = _FileCountLines($file)
$n = 1
For $i = 1 To $CountLines
	$sTest = FileReadLine($file, $i)
		If mod($i -1, 60) = 0 Then
		$n +=1
	EndIf
	If StringLen($sTest) = 0 Then ExitLoop
	$sTest = StringRegExpReplace($sTest, "[_*+;0-9]", "")
	$nPos = StringInStr($sTest, "=")
	If $nPos < 9 Then
		$sTest = StringReplace($sTest, "=", $n1_7)
		FileWrite(@ScriptDir & "\Result1\" & $n-1 & "_урок.txt", $sTest & @CRLF)
	EndIf
	If $nPos < 17 And $nPos > 8 Then
		$sTest = StringReplace($sTest, "=", $n8_15)
		FileWrite(@ScriptDir & "\Result1\" & $n-1 & "_урок.txt", $sTest & @CRLF)
	EndIf
	If $nPos < 25 And $nPos > 16 Then
		$sTest = StringReplace($sTest, "=", $n16_24)
		FileWrite(@ScriptDir & "\Result1\" & $n-1 & "_урок.txt", $sTest & @CRLF)
	EndIf
Next

У меня получилось разделить словарь на 60 файлов-уроков с добавлением 1, 2 или 3 @TAB, в зависимости от длины англ. слова. Правда работает долго, у меня ~40 секунд.
Наверное, это можно сделать как-то изящнее, но я изучаю AutoIt всего 2 месяца и многого еще не знаю.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Дело в том, что если не использовать FileOpen - при каждой операции чтения-записи из файла он будет сначала открываться, потом закрываться. Учитывая число вызовов :smile:, выгоднее всё-таки использовать FileOpen
И ещё, эту комбинацию If'ов можно заменить одним Switch...Case...EndSwitch
 
Верх