PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Связанный список


Связанный список

Сообщений 1 страница 14 из 14

1

Столкнулся с проблемой следующего плана: у меня есть связанный список, в котором находится 4 записи. Одна запись имеет примерно такой вид:

Код:
мандарины,апельсины,бананы,лимоны,огурцы

Мой вопрос: как при помощи цикла и команд string осуществить занесение КАЖДОГО слова в ListViewGadget. Знаю, что есть команда AddGadgetItem, но вопрос именно в том, как каждое слово. У меня получилось только первое слово до запятой. Вот как я делал:

Код:
If ReadFile(0, "part_b.txt")  ;читаем файл
   While Eof(0) =0   ;пока не будет конец
    AddElement(open_part())            ;добавляем элемент в список
    open_part() =ReadString(0)         ; этот элемент равен прочитанной строке  
   Wend
   CloseFile(0)              ;закрываем файл
  EndIf

For x.l=1 To 7
 zapita.l=FindString(open_part(),",",1)
 world.s=Left(open_part(),zapita)
 AddGadgetItem(#Listview_4,0,world)
 
Next x

0

2

Попробуй так

Код:
NewList open_part.s()
If OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(0, 10, 10, 250, 120)
  If ReadFile(0, "part_b.txt")  ;читаем файл
      While Eof(0) =0   ;пока не будет конец
       AddElement(open_part())            ;добавляем элемент в список
       open_part() = ReadString(0)         ; этот элемент равен прочитанной строке  
      Wend
      CloseFile(0)              ;закрываем файл
  EndIf
   C = CountString(open_part(), ",");определяем количество запятых(разделителей)
   For x.l=1 To C
    world.s=StringField(open_part(),x,",") 
    AddGadgetItem(0,0,world)
   Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

3

lakomet, огромное спасибо!

0

4

Проблема в том, что при таком способе во-первых занесение происходит почему то с конца вперед, то есть сначала огурцы, потом лимоны и тд. Во вторых, не заносится самое последнее слово, то есть огурцы в нашем случае. Видимо это из-за этого, что запитых меньше на одну, чем всех слов.

0

5

For x.l=C+1 To 1 Step -1
и будут все слова провельно

Отредактировано mirashic (18.04.2010 18:51:29)

0

6

Ну тогда так

Код:
NewList open_part.s()
If OpenWindow(0, 0, 0, 270, 140, "ListViewGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(0, 10, 10, 250, 120)
  If ReadFile(0, "part_b.txt")  ;читаем файл
      While Eof(0) =0   ;пока не будет конец
       AddElement(open_part())            ;добавляем элемент в список
       open_part() = ReadString(0)         ; этот элемент равен прочитанной строке  
      Wend
      CloseFile(0)              ;закрываем файл
  EndIf
   C = CountString(open_part(), ",")+1;определяем количество запятых(разделителей)
   Debug C
   For x.l=C To 1 Step -1
    world.s=StringField(open_part(),x,",") 
    AddGadgetItem(0,0,world)
   Next
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

7

Скажите, как выбрать определенную запись с списка? Пользуюсь командой SelectElement, но она то работает, то нет. Вот процедура, где написаны все необходимые действия. Посмотрите, что не так? Постоянно происходит путаница в самих записях.

Код:
Procedure Open_Window_1()
 If OpenWindow(#Window_1, 277, 299, 152, 203, GetGadgetText(100),  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  ListViewGadget(#Listview_4, 0, 0, 152, 203)
  ResizeWindow(#Window_1,WindowMouseX(#Window_0)+140,WindowMouseY(#Window_0)+50,#PB_Ignore ,#PB_Ignore )
  
If ReadFile(0, "part_b.txt")  ;читаем файл
 While Eof(0) =0   ;пока не будет конец
  AddElement(open_part())            ;добавляем элемент в список
  open_part()=ReadString(0)         ; этот элемент равен прочитанной строке  
 Wend
 CloseFile(0)              ;закрываем файл
EndIf

part.s=GetGadgetText(100)
If part="  Голова  "
 SelectElement(open_part(),0)
ElseIf part="  Тело  "
 SelectElement(open_part(),1)
ElseIf part="  Руки  "
 SelectElement(open_part(),2)
ElseIf part="  Ноги  "
 SelectElement(open_part(),3)
EndIf   

C=CountString(open_part(), ",")+1;определяем количество запятых(разделителей)
 For x.l=C To 1 Step -1
  world.s=StringField(open_part(),x,",") 
  AddGadgetItem(#Listview_4,numb,world)
 Next
 EndIf
EndProcedure

0

8

Разобрался. Все дело в том, что при вызове этой процедуре записи накладывались друг на друга. Нужно было просто воспользоваться командой ClearList (open_part())

0

9

Как из всего связанного списка по определенному слову (словосочетанию) найти необходимую строку. Например есть текст, каждая строка которого занесена в список:

Код:
инструменты-молоток,гвоздь,дрель
фрукты-яблоко,банан,апельсин
овощи-капуста,свекла,помидор

Как мне сделать активную строчку в списке, зная название, например фрукты?

0

10

Попробуй Kolichestvo_Sovpadenii = CountString(Isleduemaia_Stroka$, Iskomoe_Slovo$) перебирая строки.

Отредактировано lakomet (19.04.2010 16:26:45)

0

11

То есть циклом я так понял. А как написать если нашлась, то ... If CountString(Isleduemaia_Stroka$, Iskomoe_Slovo$)=1 ??

0

12

daiomik написал(а):

А как написать если нашлась, то ... If CountString(Isleduemaia_Stroka$, Iskomoe_Slovo$)=1

Наверное так If CountString(Isleduemaia_Stroka$, Iskomoe_Slovo$) > 0

0

13

daiomik написал(а):

Как мне сделать активную строчку в списке, зная название, например фрукты?

Код:
ForEach open_part()
  If FindString(open_part(), "фрукты")>0
    Break
  EndIf
Next

После выполения этого кода, станет активным элемент списка, содержащий требуемое слово.

0

14

Спасибо Петр и lakomet

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Связанный список