Автор | Сообщение |
|
| |
Пост 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. Как узнать что путь к папке из которой запускается программа имеет длинные имена ? На вскидку приходит вариант разбить на токены с разделителем "\" и затем чекать длины всех токенов. Есть еще метода ?
|
|
|
Ответов - 85
, стр:
1
2
3
4
5
All
[только новые]
|
|
|
| |
Пост N: 4331
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.12.14 22:46. Заголовок: up..
up
|
|
|
|
| |
Пост N: 391
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.12.14 23:34. Заголовок: Dima пишет: up 1 ..
Dima пишет: 1 проверить на ASC коды весь путь , если есть ASC кроме латинских то... 2 не помню на вскидку фенкцию ((( но есть точно - та что получает короткое имя и если есть в пути длинные - тто длинна будет разной и в короткой версии будет знак тильда
|
|
|
|
| |
Пост N: 4332
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 00:03. Заголовок: понял , затестю завт..
понял , затестю завтра. спасибо !
|
|
|
|
| |
Пост 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 ) ;
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 4333
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 11:11. Заголовок: Игорь спасибо ! А та..
Игорь спасибо ! А такая проверка думаешь будет не правильной ? a:=curdir() ? a if hb_oemtoansi(a)#a ? "Есть кирилица" endif
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 395
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.12.14 11:36. Заголовок: Dima пишет: А такая..
Dima пишет: цитата: | А такая проверка думаешь будет не правильной ? |
| не проверял , но должна работать , возможно дольше на пару микросекунд из-за преобразования
|
|
|
|
| |
Пост 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 ")
|
|
|
|
| |
Пост N: 4335
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 11:45. Заголовок: Haz пишет: ? GetSho..
Haz пишет: цитата: | ? GetShotFilename( Exename() ) |
| OK. Понял. Если запустить из папки в имени которой есть кирилица то вернет пустую строку
|
|
|
|
| |
Пост 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
|
|
|
|
|
| |
Пост N: 4336
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 14:18. Заголовок: Ага. Это я кодовую с..
Ага. Это я кодовую страницу не указал. Если указать RU1251 - то все нормально Если указать RU866 - то тоже пусто Получается что обе проверки можно свести к одному условию. Если GetShortFilename( Exename() ) не равно Exename() то с путем что то не то.
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 398
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.12.14 16:33. Заголовок: Dima пишет: Останов..
Dima пишет: цитата: | Остановился на такой проверке |
| Этот вариант проверяет наличие расширенных ASC кодов ( русские буквы ) , а зачем там == 32 ? Если для проверки длинного имени, то оно мжет быть и без пробелов Dima пишет: можно заменить на ASCPOS( cPath. n), хотя мне больше нравится вариант работы со строкой как с массивом cPath[n] а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ?
|
|
|
|
| |
Пост N: 4338
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 16:37. Заголовок: Haz пишет: а в чем ..
Haz пишет: цитата: | а в чем вообще суть проблемы , чем тебе помешали русские буквы и длинные пути ? |
| а косяки возникают при приеме / передаче файлов на фтп из проги.
|
|
|
|
| |
Пост 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
|
|
|
|
| |
Пост N: 399
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.12.14 16:44. Заголовок: Dima пишет: тот вар..
Dima пишет: цитата: | тот вариант у меня ошибку бьет. |
| нужно это #require "hbxpp" #include "hbxpp.ch" и это hbxpp.lib
|
|
|
|
| |
Пост N: 4340
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.12.14 16:53. Заголовок: Haz пишет: нужно эт..
Haz пишет: цитата: | нужно это #require "hbxpp" #include "hbxpp.ch" |
| Упс. Заработало.
|
|
|
|
| |
Пост 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.
|
|
|
|
| |
Пост 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]
|
|
|
Ответов - 85
, стр:
1
2
3
4
5
All
[только новые]
|
|