purebasic.info

PureBasic forum
Текущее время: Пн дек 10, 2018 6:35 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Чт дек 06, 2018 10:49 pm 
Не в сети
доцент

Зарегистрирован: Ср апр 28, 2010 4:02 pm
Сообщений: 52
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Доброго времени суток.
Недавно решил попробовать наладить общение между консольными приложениями. По задумке всё просто - делаем на PB консольное приложение для тестов, и соответственную для него программу-оболочку.
Вот такой у них код:
Код:
1
2
3
4
5
6
7
If OpenConsole()
  For i=1 To 15
    PrintN("Text "+i)
  Next
  CloseConsole()
EndIf
End 121000121


Код:
1
2
3
4
5
6
7
8
9
10
11
Program=RunProgram("test1.exe", "", "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
If Program
  While ProgramRunning(Program)
    If AvailableProgramOutput(Program)
      Debug ReadProgramString(Program)
    EndIf
  Wend
  Debug ProgramExitCode(Program)
 
  CloseProgram(Program)
EndIf


Ожидаем в окне отладчика увидеть строки "Text 1; Text 2; Text 3 ...". Но что-то пошло не так, и в окне отладчика отображается только буква "T" и пустые строки:
Вложение:
Снимок.PNG [5.17 KiB]
Скачиваний: 0

С другими консольными программами такого не происходит. Например, обращение к pbcompiler.exe проблемы не вызвало.
Возможно я что-то упустил в своём тестовом примере консольного приложения. Мой вопрос - что именно это может быть и как правильно оформлять консольные приложения?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 07, 2018 4:43 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 336
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
а если ты первую букву поменяешь и она отразится, то это проблема связана с анси и уникодом.

Вот вопросы к тебе:
1 какая версия пурика?
2 в каком формате сохранен текст. Плайн или УТФ8?
3 в каком режиме запущен компилятор?
если есть не согласования вот тебе такой прикол будет.
Оно же тебе чего-то выдает.
Дай ответы и подскажем где что сменить

_________________
искатель истины


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 07, 2018 5:11 pm 
Не в сети
доцент

Зарегистрирован: Ср апр 28, 2010 4:02 pm
Сообщений: 52
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Первая буква меняется соответственно.

PureBasic 5.60 (Windows - x86)
Формат файла - UTF8 в обоих исходных файлах. - http://prntscr.com/lrzk3j
Про режим компилятора не понятно немного. Там ведь не так много настроек. И в последних версиях PB убрали компиляцию в ascii. Вот мои настройки - http://prntscr.com/lrzjw1
Проверял на двух машинах с 64-битной системой (вин 8.1 и 10, если что)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 07, 2018 5:56 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 336
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
у меня решилось так, нужно добавить #PB_Program_Unicode при запуске проги,
в старых версиях я преобразовывал иначе, настройки верные.
Код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Program=RunProgram("C:\_TEST\3\test1.exe", "", "", #PB_Program_Open|#PB_Program_Read| #PB_Program_Unicode)
If Program
    s$=""
  While ProgramRunning(Program)
    If AvailableProgramOutput(Program)
        l$=ReadProgramString(Program)
      ;  Debug l$
       ; Debug Len(l$)
        s$+l$+Chr(13)
    EndIf
Wend
Debug s$
ShowMemoryViewer(@s$, 1000)
  Debug ProgramExitCode(Program)
 
  CloseProgram(Program)
EndIf


_________________
искатель истины


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 07, 2018 6:27 pm 
Не в сети
доцент

Зарегистрирован: Ср апр 28, 2010 4:02 pm
Сообщений: 52
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Спасибо, у меня тоже получилось. Я-то думал, что раз уж в справке говорится (по крайней мере, в большей части разделов) что UTF8 - кодировка по умолчанию, то и вывод в консоль будет таким. Оказалось, есть нюансы.
Ещё раз спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт дек 07, 2018 7:25 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 336
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
Цитата:
UTF8 - кодировка по умолчанию
это не совсем так.
файлы пурика записаны в этой кодировке, и в редакторе тоже, при условии что так настроено.
В памяти все иначе, и зависит только од настроек компилятора, а там Анси либо уникод и никакого УТФа там и в помине нету. Если нужно в файл или память записать в УТФ то нужно использовать нужные константы, точнее эту #PB_UTF8 для УТФ8.
Первая картинка которую ты выложил это настройка редактора и файла пуриковского в каком формате сохранять, в твоей версии пурика нет возможности компилятор запускать в режиме Анси, поэтому все текстовые даные в памяти имеют формат юникода.

В коде что я дал там есть такая строка ShowMemoryViewer(@s$, 1000), она позволяет посмотреть в каком виде в памяти записаны строки и отображать даные в любой кодировке.

_________________
искатель истины


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB