Привет!
Как в файле можно узнать номер строки? В справке не нашел.
Отредактировано 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 » Светодиодная матрица - МОДЖЕТ (антигаджет) на Пурике