On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 4326
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.12.14 16:59. Заголовок: Пара простых вопросов ;)


1. Как узнать что путь к папке из которой запускается программа имеет символы кирилицы ?
На ум приходит такой способ
 
proc main()
local a
REQUEST HB_LANG_RU866
HB_LANGSELECT("RU866")
REQUEST HB_CODEPAGE_RU866
hb_cdpSelect( "RU866" )
a:=curdir()

? a
if hb_oemtoansi(a)#a
? "Есть кирилица"
endif

wait

RETURN NIL

Есть еще метода ?

2. Как узнать что путь к папке из которой запускается программа имеет длинные имена ?
На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины
всех токенов.
Есть еще метода ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 85 , стр: 1 2 3 4 5 All [только новые]


администратор




Пост N: 4331
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.12.14 22:46. Заголовок: up..


up

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 391
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.12.14 23:34. Заголовок: Dima пишет: up 1 ..


Dima пишет:

 цитата:
up



1 проверить на ASC коды весь путь , если есть ASC кроме латинских то...
2 не помню на вскидку фенкцию ((( но есть точно - та что получает короткое имя и если есть в пути длинные - тто длинна будет разной и в короткой версии будет знак тильда

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4332
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 00:03. Заголовок: понял , затестю завт..


понял , затестю завтра.
спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 393
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 10:49. Заголовок: Dima пишет: не пом..


Dima пишет:

 цитата:
не помню на вскидку фенкцию



cShot := GETSHORTFILENAME( cLongName )

=============================================
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( GETSHORTFILENAME )
{
char pszReturn[ MAX_PATH ] ;
pszReturn[0]= '\0' ;

GetShortPathName( hb_parcx( 1 ), pszReturn, MAX_PATH - 1 ) ;
hb_retc( pszReturn ) ;


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 394
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:03. Заголовок: Dima пишет: провери..



 цитата:
проверить на ASC коды весь пут




Примерно так

#require "hbxpp"

#include "hbxpp.ch"



FUNC Main( ... )
local n := 0
local cParh := ""
local lFound := .F.


REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )

? cPath := hb_argV(1)
?

FOR n := 1 TO LEN(cPath)
IF ASC(cPath[n]) > 127
lFound := .T.
? cPath[n]
EXIT
END
END


RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4333
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:11. Заголовок: Игорь спасибо ! А та..


Игорь спасибо !
А такая проверка думаешь будет не правильной ?
 
a:=curdir()

? a
if hb_oemtoansi(a)#a
? "Есть кирилица"
endif


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4334
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:35. Заголовок: Haz пишет: cShot :=..


Haz пишет:

 цитата:
cShot := GETSHORTFILENAME( cLongName )



что то она пустую строку выдает

 
proc main()
? GETSHORTFILENAME(curdir()) // пусто
? GETSHORTFILENAME() // пусто
? GETSHORTFILENAME("bla bla bla bla bla bla bla bla bla bla ") // пусто
wait
RETURN NIL

*cShot := GETSHORTFILENAME( cLongName )

*=============================================
#pragma BEGINDUMP

#include <windows.h>
#include "hbapi.h"

HB_FUNC( GETSHORTFILENAME )
{
char pszReturn[ MAX_PATH ] ;
pszReturn[0]= '\0' ;

GetShortPathName( hb_parcx( 1 ), pszReturn, MAX_PATH - 1 ) ;
hb_retc( pszReturn ) ;
}
#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 395
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:36. Заголовок: Dima пишет: А такая..


Dima пишет:

 цитата:
А такая проверка думаешь будет не правильной ?



не проверял , но должна работать , возможно дольше на пару микросекунд из-за преобразования

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 396
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 11:42. Заголовок: Dima пишет: что то ..


Dima пишет:

 цитата:
что то она пустую строку выдает



у меня работает
проверял так
? GetShotFilename( Exename() )

CurDir() - возвращаяет не имя файла
попробуй Directory()[1][1]



вот это точно ничего не покажет т.к. файла нет
GETSHORTFILENAME("bla bla bla bla bla bla bla bla bla bla ")





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4335
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 11:45. Заголовок: Haz пишет: ? GetSho..


Haz пишет:

 цитата:
? GetShotFilename( Exename() )


OK. Понял.
Если запустить из папки в имени которой есть кирилица то вернет пустую строку

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 397
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 12:20. Заголовок: Dima пишет: Если за..


Dima пишет:

 цитата:
Если запустить из папки в имени которой есть кирилица то вернет пустую строку



GetShotFilename( Exename() )
проверил - с кирилицей тож работает нормально

отсюда запустил
C:\Командировки\Документация>Ais_Zpto.exe

во что выдало
C:\C7BA~1\F63B~1\Ais_Zpto.exe

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4336
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 14:18. Заголовок: Ага. Это я кодовую с..


Ага. Это я кодовую страницу не указал.
Если указать RU1251 - то все нормально
Если указать RU866 - то тоже пусто

Получается что обе проверки можно свести к одному условию.
Если GetShortFilename( Exename() ) не равно Exename() то с путем что то не то.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4337
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:08. Заголовок: Остановился на такой..


Остановился на такой проверке
 
Func TestPath(cpath)
local ret:=.t.
local n
FOR n=1 TO LEN(cPath)
IF ASC(substr(cPath,n,1)) > 127 .or. ASC(substr(cPath,n,1))==32
ret:= .f.
EXIT
END
next

return ret



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 398
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 16:33. Заголовок: Dima пишет: Останов..


Dima пишет:

 цитата:
Остановился на такой проверке



Этот вариант проверяет наличие расширенных ASC кодов ( русские буквы ) , а зачем там == 32 ?
Если для проверки длинного имени, то оно мжет быть и без пробелов

Dima пишет:

 цитата:
ASC(substr(cPath,n,1)



можно заменить на ASCPOS( cPath. n), хотя мне больше нравится вариант работы со строкой как с массивом cPath[n]

а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ?



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4338
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:37. Заголовок: Haz пишет: а в чем ..


Haz пишет:

 цитата:
а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ?


а косяки возникают при приеме / передаче файлов на фтп из проги.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4339
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:38. Заголовок: Haz пишет: со строк..


Haz пишет:

 цитата:
со строкой как с массивом cPath[n]


этот вариант у меня ошибку бьет.

local a:="12345"
? a[3] //Error BASE/1068 Argument error: array access
wait


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 399
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.12.14 16:44. Заголовок: Dima пишет: тот вар..


Dima пишет:

 цитата:
тот вариант у меня ошибку бьет.



нужно это
#require "hbxpp"
#include "hbxpp.ch"

и это hbxpp.lib

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4340
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.14 16:53. Заголовок: Haz пишет: нужно эт..


Haz пишет:

 цитата:
нужно это
#require "hbxpp"
#include "hbxpp.ch"


Упс. Заработало.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4355
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.14 16:20. Заголовок: еще простой вопрос ;..


еще простой вопрос ;)

Есть ли такая функция , что бы вернула
подстроку из строки , находящуюся между
2 - мя подстроками ?
Например есть строка MN_20.3456.ZIP
Нужно что типа вот такой фунции
xxx("MN_20.3456.ZIP","MN_",".ZIP") // должна вернуть 20.3456
Понятно что можно сделать с помощью Substr,At,Rat.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 400
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.12.14 18:55. Заголовок: Dima пишет: Понятно..


Dima пишет:

 цитата:
Понятно что можно сделать с помощью Substr,At,Rat.



может так ?
cString := MN_20.3456.ZIP
cRegExp := "MN_|\.ZIP"
? hb_RegExSplit( cRegExp , cString)[2]



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 85 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 182
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет