Привет!
Как в файле можно узнать номер строки? В справке не нашел.
Отредактировано max (08.06.2011 19:23:26)
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике
Привет!
Как в файле можно узнать номер строки? В справке не нашел.
Отредактировано max (08.06.2011 19:23:26)
Как в файле можно узнать номер строки?
CreateFile(0,"C:/Count.txt")
For a = 0 To 150
WriteStringN(0,"This is line number "+Str(a))
Next
CloseFile(0)
ReadFile(0,"C:/Count.txt")
x = 0
While Eof(0) = 0
If Right(ReadString(0),2) = "10"
Debug "Line:"+Str(x)
EndIf
x+1
Wend
CloseFile(0)Ну как то так...Можно еще с FileSeek(#File,NewPosition) поиграться!
Отредактировано Дмитрий (08.06.2011 19:51:53)
Спасибо. Буду разбираться.
Ну как то так
Это если строки явно пронумерованы.
Это если строки явно пронумерованы.
это наглядный пример =)
Это если строки явно пронумерованы.
А как так сделать?
какой файл читать собственно нужно!? Содержимое в студию
Файл - это прогоз погоды.
;
; ------------------------------------------------------------
; Парсинг XML кода возвращаемого с ресурса Gismeteo.ru
;
;
; (c) 2009 - kvitaliy
;
; ------------------------------------------------------------
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
#Text_0
#Image_1
#Text_2
#Text_3
#Text_4
#Text_5
#Text_6
#Text_7
#Text_8
#ComboBox_0
#ButtonImage_1
#ButtonImage_2
#ButtonImage_3
EndEnumeration
;}
UsePNGImageDecoder()
#XML = 0
Global Sity$
Global SityNew$
Global N=0
Global G=1
Global Dim DataDay.s(4)
Global Dim cloudiness.s(4)
Global Dim precipitation.s(4)
Global Dim PRESSUREmin.s(4)
Global Dim PRESSUREmax.s(4)
Global Dim TEMPERATUREmin.s(4)
Global Dim TEMPERATUREmax.s(4)
Global Dim HEATmin.s(4)
Global Dim HEATmax.s(4)
Global Dim WINDmin.s(4)
Global Dim WINDmax.s(4)
Global Dim RELWETmin.s(4)
Global Dim RELWETmax.s(4)
Global Dim direction.s(4)
;{ Fonts
Enumeration
#Font_Text_0
#Font_Text_6
#Font_Text_8
EndEnumeration
;}
;{ Images
Enumeration
#Image_Image_1
#Image_ButtonImage_1
#Image_ButtonImage_2
#Image_ButtonImage_3
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure GisMet_XML_Data(*CurrentNode, CurrentSublevel)
If XMLNodeType(*CurrentNode) = #PB_XML_Normal
If GetXMLNodeName(*CurrentNode) = "FORECAST": N+1:EndIf
If ExamineXMLAttributes(*CurrentNode)
While NextXMLAttribute(*CurrentNode)
Select XMLAttributeName(*CurrentNode)
Case "sname"
Sity$=XMLAttributeValue(*CurrentNode)
Case "day"
day$=XMLAttributeValue(*CurrentNode)
Case "month"
month$=XMLAttributeValue(*CurrentNode)
Case "year"
year$=XMLAttributeValue(*CurrentNode)
Case "hour"
hour$=XMLAttributeValue(*CurrentNode)
Case "weekday"
Select XMLAttributeValue(*CurrentNode)
Case "1"
weekday$= "воскресенье"
Case "2"
weekday$= "понедельник"
Case "3"
weekday$= "вторник"
Case "4"
weekday$= "среда"
Case "5"
weekday$= "четверг"
Case "6"
weekday$= "пятница"
Case "7"
weekday$= "суббота"
EndSelect
dataProg$= day$ + "." + month$ +"." + year$+"г., "+weekday$+", на " + hour$+ "ч. "
DataDay(N)=dataProg$
Case "cloudiness"; Облачность
Select XMLAttributeValue(*CurrentNode)
Case "0"
cloudiness(N)= "ясно"
Case "1"
cloudiness(N)= "малооблачно"
Case "2"
cloudiness(N)= "облачно"
Case "3"
cloudiness(N)= "пасмурно"
EndSelect
Case "precipitation" ; Осадки
Select XMLAttributeValue(*CurrentNode)
Case "4"
precipitation(N)= "дождь"
Case "5"
precipitation(N)= "ливень"
Case "6","7"
precipitation(N)= "снег"
Case "8"
precipitation(N)= "гроза"
Case "9"
precipitation(N)= "нет данных"
Case "10"
precipitation(N)= "без осадков"
EndSelect
;Debug cloudiness(N) + ", " + precipitation(N)
Case "min"
Select GetXMLNodeName(*CurrentNode)
Case "PRESSURE"
PRESSUREmin(N) = XMLAttributeValue(*CurrentNode)
Case "TEMPERATURE"
TEMPERATUREmin(N) = XMLAttributeValue(*CurrentNode)
Case "HEAT"
HEATmin(N) = XMLAttributeValue(*CurrentNode)
Case "WIND"
WINDmin(N) = XMLAttributeValue(*CurrentNode)
Case "RELWET"
RELWETmin(N) = XMLAttributeValue(*CurrentNode)
EndSelect
Case "max"
Select GetXMLNodeName(*CurrentNode)
Case "PRESSURE"
PRESSUREmax(N) = XMLAttributeValue(*CurrentNode)
Case "TEMPERATURE"
TEMPERATUREmax(N) = XMLAttributeValue(*CurrentNode)
Case "HEAT"
HEATmax(N) = XMLAttributeValue(*CurrentNode)
Case "WIND"
WINDmax(N) = XMLAttributeValue(*CurrentNode)
Case "RELWET"
RELWETmax(N) = XMLAttributeValue(*CurrentNode)
EndSelect
Case "direction"
Select XMLAttributeValue(*CurrentNode)
Case "0"
direction(N) = "северный"
Case "1"
direction(N) = "северо-восточный"
Case "2"
direction(N) = "восточный"
Case "3"
direction(N) = "юго-восточный"
Case "4"
direction(N) = "южный"
Case "5"
direction(N) = "юго-западный"
Case "6"
direction(N) = "западный"
Case "7"
direction(N) = "северо-западный"
EndSelect
EndSelect
Wend
EndIf
;
*ChildNode = ChildXMLNode(*CurrentNode)
While *ChildNode <> 0
GisMet_XML_Data(*ChildNode, CurrentSublevel+1)
*ChildNode = NextXMLNode(*ChildNode)
Wend
EndIf
EndProcedure
Procedure FileGis(Ind.i)
If CreateFile(1, "Прогноз.txt") ; we create a new text file...
WriteStringN(1, "В городе " + URLDecoder(Sity$)+" "+ DataDay(Ind)+ "прогнозируется:")
WriteStringN(1, "давление " + PRESSUREmin(Ind) + "-"+ PRESSUREmax(Ind) +" мм.рт.ст.,")
WriteStringN(1, "ветер "+direction(Ind)+","+" "+WINDmin(Ind)+"-"+WINDmax(Ind) +"m\c,")
WriteStringN(1, "относительная влажность воздуха " + RELWETmin(Ind) + "-"+ RELWETmax(Ind) +" %")
WriteStringN(1, "температура "+TEMPERATUREmin(Ind)+"-"+ TEMPERATUREmax(Ind) +"°C, " + cloudiness(Ind) + ", " + precipitation(Ind))
CloseFile(1) ; close the previously opened file and store the written data this way
Else
MessageRequester("Information","Can't create the file!")
EndIf
EndProcedure
Procedure ShowGis(Ind.i)
;- вывод на печать
; Debug "Комфортность: " + HEATmin(i)+"-"+ HEATmax(i) +"°C"
SetGadgetText(#Text_0,URLDecoder(Sity$))
SetGadgetText(#Text_2,"Давление: " + PRESSUREmin(Ind) + "..."+ PRESSUREmax(Ind) +" мм.рт.ст.")
SetGadgetText(#Text_3,"Ветер "+direction(Ind))
SetGadgetText(#Text_4,WINDmin(Ind)+"..."+WINDmax(Ind) +"m\c")
SetGadgetText(#Text_5,"Влажность: " + RELWETmin(Ind) + "..."+ RELWETmax(Ind) +" %")
SetGadgetText(#Text_6,TEMPERATUREmin(Ind)+"..."+ TEMPERATUREmax(Ind) +"°C")
SetGadgetText(#Text_8,DataDay(Ind))
SetGadgetText(#Text_7,cloudiness(Ind) + ", " + precipitation(Ind))
Select precipitation(Ind)
Case "без осадков"
Select cloudiness(Ind)
Case "ясно":
LoadImage(0, "Pogoda\pogoda20.png")
Case "малооблачно":
LoadImage(0, "Pogoda\pogoda9.png")
Case "облачно":
LoadImage(0, "Pogoda\pogoda2.png")
Case "пасмурно":
LoadImage(0, "Pogoda\pogoda24.png")
EndSelect
Case "дождь"
LoadImage(0, "Pogoda\pogoda14.png")
Case "ливень"
LoadImage(0, "Pogoda\pogoda13.png")
Case "снег"
LoadImage(0, "Pogoda\pogoda19.png")
Case "гроза"
LoadImage(0, "Pogoda\pogoda23.png")
EndSelect
SetGadgetState(#Image_1, ImageID(0))
EndProcedure
InitNetwork()
SityNew$="27612"; "29838"; - Барнаул
newSity:
Filename$ = "gis.xml";
;If ReceiveHTTPFile("http://informer.gismeteo.ru/xml/"+SityNew$+"_1.xml", Filename$)
;Debug "Прогноз загружен"
If FileSize(FileName$) > 0
If LoadXML(#XML, FileName$)
If XMLStatus(#XML) <> #PB_XML_Success
Message$ = "Error in the XML file:" + Chr(13)
Message$ + "Message: " + XMLError(#XML) + Chr(13)
Message$ + "Line: " + Str(XMLErrorLine(#XML)) + " Character: " + Str(XMLErrorPosition(#XML))
MessageRequester("Error", Message$)
EndIf
*MainNode = MainXMLNode(#XML)
If *MainNode
GisMet_XML_Data(*MainNode, 0)
EndIf
If OpenWindow(#Window_0, 436, 47, 400, 400, "Прогноз погоды на сутки", #PB_Window_SystemMenu|#PB_Window_TitleBar)
TextGadget(#Text_0, 40, 5, 250, 30, "", #PB_Text_Center)
ImageGadget(#Image_1, 5, 95, 155, 160, 0)
TextGadget(#Text_2, 190, 210, 200, 25, "Давление", #PB_Text_Center)
TextGadget(#Text_3, 185, 105, 200, 25, "направление ветра", #PB_Text_Center)
TextGadget(#Text_4, 185, 135, 200, 25, "Скорость", #PB_Text_Center)
TextGadget(#Text_5, 185, 165, 200, 25, "Влажность", #PB_Text_Center)
TextGadget(#Text_6, 85, 265, 210, 50, "Температура", #PB_Text_Center)
TextGadget(#Text_7, 85, 315, 210, 50, "атмосфера", #PB_Text_Center)
TextGadget(#Text_8, 5, 40, 250, 30, "число", #PB_Text_Center)
ComboBoxGadget(#ComboBox_0, 85, 370, 210, 20): HideGadget(#ComboBox_0,1)
ButtonImageGadget(#ButtonImage_1, 10, 360, 45, 30, CatchImage(#Image_ButtonImage_1, ?Image_ButtonImage_1))
ButtonImageGadget(#ButtonImage_2, 340, 360, 45, 30, CatchImage(#Image_ButtonImage_2, ?Image_ButtonImage_2))
ButtonImageGadget(#ButtonImage_3, 360, 10, 35, 35, CatchImage(#Image_ButtonImage_3, ?Image_ButtonImage_3))
; Gadget Fonts
SetGadgetFont(#Text_0, LoadFont(#Font_Text_0, "Microsoft Sans Serif", 14, 272))
SetGadgetFont(#Text_6, LoadFont(#Font_Text_6, "Microsoft Sans Serif", 20, 272))
SetGadgetFont(#Text_8, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
SetGadgetFont(#Text_7, LoadFont(#Font_Text_8, "Microsoft Sans Serif", 12, 784))
GadgetToolTip(#ButtonImage_1, "Обновить данные")
GadgetToolTip(#ButtonImage_2, "Дальше...")
GadgetToolTip(#ButtonImage_3, "Найти другой город")
EndIf
ShowGis(1)
FileGis(1)
If ReadFile(0, "GismeteoCodSity.txt")
While Eof(0) = 0
AddGadgetItem(#ComboBox_0, -1,ReadString(0))
Wend
CloseFile(0)
Else
MessageRequester("Information","Нет файла - справочника")
EndIf
;{- Event loop
Repeat
Event = WaitWindowEvent()
Select Event
; ///////////////////
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Text_0
ElseIf EventGadget = #ButtonImage_3
HideGadget(#ComboBox_0,0)
ElseIf EventGadget = #ComboBox_0
SityNew$= Left(GetGadgetText(#ComboBox_0), 5)
If Len(SityNew$)
HideGadget(#ComboBox_0,1)
N=0
Goto newSity
EndIf
ElseIf EventGadget = #ButtonImage_1
N=0
Goto newSity
ElseIf EventGadget = #ButtonImage_2
If G<=3
G+1
ShowGis(G)
FileGis(G)
Else
G=1
ShowGis(G)
FileGis(G)
EndIf
EndIf
; ////////////////////////
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
ForEver
Else
MessageRequester("Error", "The file cannot be opened.")
EndIf
EndIf
; Else
; ;Debug "Не загружен"
; MessageRequester("Information","Нет возможности загрузить данные из Интернет!")
; EndIf
;{ Included Images
DataSection
Image_ButtonImage_1:
IncludeBinary "Pogoda\refresh.ico"
Image_ButtonImage_2:
IncludeBinary "Pogoda\right.ico"
Image_ButtonImage_3:
IncludeBinary "Pogoda\0031 - Start Find.ico"
EndDataSection
;}прогноз погоды в XML или текстовый файл который создается!? Если текстовый файл то лучше создавать ini используя Preferences и подсчет строк отпадет как таковой
А зачем вообще создавать текстовый файл?
По моему все можно организовать прямо в памяти.
А как так сделать?
Не надо ни чего нумеровать - там же есть счетчик строк, по нему и ориентироваться
ReadFile(0,"C:/Count.txt")
x = 1
While Eof(0) = 0
stroka$=ReadString(0)
If x = 10 ; ищем 10-ю строку
Debug "Line:"+Str(x) + stroka$
EndIf
x+1 ; это счетчиксчитанных строк!
Wend
CloseFile(0)А зачем вообще создавать текстовый файл?По моему все можно организовать прямо в памяти.
Согласен.
Пётр написал(а):А зачем вообще создавать текстовый файл?По моему все можно организовать прямо в памяти.
Согласен.
Не подскажите как?
Отредактировано max (09.06.2011 15:50:40)
А зачем собственно тебе что то куда то записывать? Погода в xml загружается , выводятся на форму данные. Смысл что то переписывать?
Дело в том, что после получения прогноза мне надо будет его вывести в EditorGadget.
Дело в том, что после получения прогноза мне надо будет его вывести в EditorGadget.
В исходной проге информация вводится в TextGadget, а какая разница в выводе этого же текста в EditorGadget???
какая разница в выводе этого же текста в EditorGadget???
На проге с погодой я пытаюсь разобраться, как это все работает. Основная прога в первом посте.
На проге с погодой я пытаюсь разобраться, как это все работает. Основная прога в первом посте.
Под исходной наверное подразумевалась прога получения данных о погоде.
Данные в TextGadget и EditorGadget записываются одной и той же функцией - SetGadgetText.
Понял, спасибо.
Такой вопрос: можно ли в строку меню вставить TextGadget как на картинке?
В панель инстументов можно, а в меню не пробовал.
Что-то у меня не получается.
Код.
Что-то у меня не получается.
If OpenWindow(0, 100, 200, 195, 260, "ToolBar example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
ContainerGadget(23,0,0,100,30)
If CreateToolBar(0, GadgetID(23))
ToolBarImageButton(3, LoadImage(0, "Save.ico"))
ToolBarToolTip(0, 3, "Добавить в автозагрузку")
ToolBarSeparator()
ToolBarImageButton(4, LoadImage(0, "stop.ico"))
ToolBarToolTip(0, 4, "Удалить из автозагрузки")
ToolBarSeparator()
ToolBarImageButton(5, LoadImage(0, "help32.ico"))
ToolBarToolTip(0, 5, "О программе")
ToolBarSeparator()
EndIf
CloseGadgetList()
TextGadget(55, 100, 5, 120 ,15,"MODGET ")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenu()), 0)
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1
EndIf
EndИли так:
Procedure ToolBarGadgetOpen(toolbar, offsetX)
Protected t.TBBUTTON, r.RECT, pos.l, ret.l
pos = SendMessage_(ToolBarID(toolbar), #TB_BUTTONCOUNT, 0, 0)
ret = SendMessage_(ToolBarID(toolbar), #TB_GETBUTTON, pos, @t) : t\iBitmap = offsetX
ret = SendMessage_(ToolBarID(toolbar), #TB_DELETEBUTTON, pos, 0)
ret = SendMessage_(ToolBarID(toolbar), #TB_INSERTBUTTON, pos, t)
ret = SendMessage_(ToolBarID(toolbar), #TB_GETITEMRECT, pos, @r)
UseGadgetList(ToolBarID(toolbar))
ProcedureReturn r\left
EndProcedure
Procedure ToolBarGadgetClose(toolbar)
UseGadgetList(GetParent_(ToolBarID(toolbar)))
EndProcedure
If OpenWindow(0, 100, 200, 195, 260, "ToolBar example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
If CreateToolBar(0, WindowID(0))
ToolBarImageButton(3, LoadImage(0, "Save.ico"))
ToolBarToolTip(0, 3, "Добавить в автозагрузку")
ToolBarSeparator()
ToolBarImageButton(4, LoadImage(0, "stop.ico"))
ToolBarToolTip(0, 4, "Удалить из автозагрузки")
ToolBarSeparator()
ToolBarImageButton(5, LoadImage(0, "help32.ico"))
ToolBarToolTip(0, 5, "О программе")
ToolBarSeparator()
x=ToolBarGadgetOpen(0, 120)
TextGadget(55, x+2, 5, 120 ,15,"MODGET ")
ToolBarGadgetClose(0)
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Menu
MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenu()), 0)
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
EndIf
EndСпасибо! Оба варианта работают прекрасно.
Ну как успехи?
Получается?
Привет!
Ну как успехи?
По маленьку.
Данные в TextGadget и EditorGadget записываются одной и той же функцией - SetGadgetText.
Так я могу записать только одну строчку. А как несколько?
Пытаюсь параллельно сделать мультиязычное меню на основе этого: multilang.
Текст меняется без проблем. А вот с остальным возникают проблемы. Гляньте, пожалуйста, код.
Спасибо.
Отредактировано max (14.06.2011 19:55:18)
Так я могу записать только одну строчку. А как несколько?
Enumeration
#Window_0
#Editor
#Button
#Text
EndEnumeration
;#CRLF$ -Перенос строки
OpenWindow(#Window_0,0,0,420,200,"Окно",#WS_OVERLAPPEDWINDOW|#PB_Window_ScreenCentered)
EditorGadget(#Editor,5,5,200,150)
TextGadget(#Text,210,5,205,150,"",#PB_Text_Border)
ButtonGadget(#Button,20,170,110,20,"Добавить текст")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Button
SetGadgetText(#Editor, "Строка 1" + #CRLF$ + "Строка 2" + #CRLF$ + "Строка 3")
SetGadgetText(#Text, "Строка 1" + #CRLF$ + "Строка 2" + #CRLF$ + "Строка 3")
EndSelect
EndSelect
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEverСпасибо. Попробую приспособить.
А вот с остальным возникают проблемы.
С чем именно?
У меня прога вылетела в процедуре LoadText из-за того что происходит изменение текста в еще не созданных гаджетах.
Если перенести вызов LoadText ниже по коду и расположить после создания гаджетов (перед функцией HideWindow, примерно 440 строка), то программа нормально стартует.
Может есть еще что-то, что работает не так, нужно уточнить.
примерно 440 строка
Спасибо. Теперь прога нормально стартует, но не получается добавить PanelGadget. Без нее SetGadgetText работает, а как добавлю, то на каждом SetGadgetText выскакивает ошибка.
В чем может быть проблема?
В программе ведь уже есть PanelGadget и все нормально работает.
Вы здесь » PureBasic - форум » Вопросы по PureBasic » Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике