purebasic.info

PureBasic forum
Текущее время: Чт ноя 15, 2018 1:40 am

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




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 2:32 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 235
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
Попробовал сделать двумя способами
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Global Dim Arr.s(1)
 
; Время выполнения 550
Procedure StrToArr(Array Arr.s(1), String$, Sep$ = " ")
        CountSep = CountString(String$ , Sep$)
        If CountSep = 0
                ReDim Arr(1)
                Arr(1) = String$
        Else
                ReDim Arr(CountSep+1)
                For n = 1 To CountSep+1
                        Arr(n) = StringField(String$, n, Sep$)
                Next
        EndIf
EndProcedure
 
; Блок вычисления скорости
TextFile$ = ""
Global Path$ = GetCurrentDirectory() + "\тест-скорость.htm" ; UTF-8 с BOM
If ReadFile(0, Path$)  ; если файл можно читать, продолжаем...
    While Eof(0) = 0        ; цикл пока не достигнут 'конец файла'
        TextFile$ + ReadString(0)  ; отображаем строка за строкой в отладочном окне
    Wend
    CloseFile(0)              ; закроем ранее открытый файл
Else
    MessageRequester("Информация","Не удалось открыть файл!")
        End
EndIf
 
maxfreq.q: a.q: b.q
QueryPerformanceFrequency_(@maxfreq)
maxfreq / 1000
 
time$ = ""
QueryPerformanceCounter_(@a.q)
StrToArr(Arr(), TextFile$, " ")
QueryPerformanceCounter_(@b.q)
time$ + RSet(StrD((b - a) / maxfreq, 3), 8) + " - скорость разделения" + #LF$
Debug time$
; конец "Блок вычисления скорости"
 
; Вывод результата
; StrToArr(Arr(), "привет ребята, ура", " ")
ArrSz = ArraySize(Arr())
For n = 1 To ArrSz
        Debug Arr(n)
Next
 



второй способ
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Global Dim Arr.s(1)
 
; Время выполнения 390
Procedure StrToArr2(Array Arr.s(1), String$, Sep$ = " ")
        StartPosition = 1
        Length = Len(String$)
        n = 0
        Repeat
                Position = FindString(String$ , Sep$, StartPosition)
;               MessageRequester("Сообщение", Str(StartPosition) + " - " + Str(Position))
                If Not Position
                        Position = Length + 1
                EndIf
                n + 1
                ReDim Arr(n)
                Arr(n) = Mid(String$ , StartPosition, Position-StartPosition)
                If Position = Length + 1
                        Break
                EndIf
                StartPosition = Position + 1
        ForEver
EndProcedure
 
; Блок вычисления скорости
TextFile$ = ""
Global Path$ = GetCurrentDirectory() + "\тест-скорость.htm" ; UTF-8 с BOM
If ReadFile(0, Path$)  ; если файл можно читать, продолжаем...
    While Eof(0) = 0        ; цикл пока не достигнут 'конец файла'
        TextFile$ + ReadString(0)  ; отображаем строка за строкой в отладочном окне
    Wend
    CloseFile(0)              ; закроем ранее открытый файл
Else
    MessageRequester("Информация","Не удалось открыть файл!")
        End
EndIf
 
maxfreq.q: a.q: b.q
QueryPerformanceFrequency_(@maxfreq)
maxfreq / 1000
 
time$ = ""
QueryPerformanceCounter_(@a.q)
StrToArr2(Arr(), TextFile$, " ")
QueryPerformanceCounter_(@b.q)
time$ + RSet(StrD((b - a) / maxfreq, 3), 8) + " - скорость разделения" + #LF$
Debug time$
; конец "Блок вычисления скорости"
 
; Вывод результата
; StrToArr2(Arr(), "привет ребята, ура", " ")
ArrSz = ArraySize(Arr())
For n = 1 To ArrSz
        Debug Arr(n)
Next
 



в AutoIt3 5,24 миллисекунд
Цитата:
#include <Array.au3>
$sText = FileRead(@ScriptDir & '\тест-скорость.htm') ; чтение файла
$timer = TimerInit() ; метка времени
$Array = StringSplit($sText, ' ') ; деление
MsgBox(0, "Время выполнения", 'Время : ' & Round(TimerDiff($timer), 2) & ' мс') ; Вывод времени
_ArrayDisplay($Array, 'Array') ; Вывод результата


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 3:37 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 305
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
У пурика это место TextFile$ + ReadString(0) является тормозом , причем тут сразу два в одном флаконе. в 10 раз быстрее читает ReadData, правда нужно кудато его в ОЗУ грузить, а там розбывать по строкам.
Вот какойто код мож поможет(непроверял)
viewtopic.php?f=1&t=3751&hilit=ReadFile_

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
selectfile.s=OpenFileRequester(Title$, DefaultFile$, Pattern$, PatternPosition)
 file=OpenFile(0,selectfile)
 If file
  Size.l = Lof(0)
     *Buffer = AllocateMemory( Size )
   If *Buffer
     Debug "Buffer Ok"
      If ReadData(0, *Buffer, Size) = Size
         Debug "ReadData Ok"
         CloseFile(0)
       EndIf
    Else:    Debug "Buffer faled": End ; если буфер не создан, то выходим
     EndIf
   EndIf



Второй тормоз у пурика это любые соединения строк типа TextFile$ +... если строк до тыщи то терпимо но после, быстрее позеленееш :mrgreen: и чем больше строк тем медленее и медленее. Можно даже мнуту ждать если много.Уже всего 2000 строчек занимает 0,5 сек, хотя 1000 всего 0,125, прогрессия панимаеш :lol: , а вот 10 000 не10*0,125=1,25 аж целых :shock: 26,750 секунд. вот загрузиш инет страницу на полметра и будеш разбирать, это наверное виндовские блокноты также разотают :lol:

тут вопрос был со строками http://purebasic.info/phpBB3ex/viewtopi ... 649#p87888, но там для NewList. Думаю Петр может подсказать как эти строки быстро в кучу сростить. както в память дописывать все время приращивая размер ОЗУ на длинну строки через PokeS, если ничего ненапутал. Сам немного тренировался на другом :)

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 3:46 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 235
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
balex1978 писал(а):
У пурика это место TextFile$ + ReadString(0) является тормозом
Эти штуки не входят в вычисления. Метка времени стоит перед и после функции StrToArr, то есть под прицелом только StrToArr и ничего больше, ни Debug, ни цикл вывода, ни что-то ещё.

И кстати я погуглил и на офсайте нашёл ещё варианты, но в них надо разбираться. 1, 2, 3

Проблема скорости в том что функции каждый раз ведут отсчёт от начала данных, StringField ищет 5-е совпадение от начала, а не от конца предыдущего найденного, а Mid идёт от начала к позиции захвата, хоть и не ищет но счётчик отсчёта символов работает, поэтому видимо быстрее отработал. В идеале нужно получить указатели на начало всех кусков, то есть FindString отработал, получил позицию, её в указатель, получил следующую позицию - для предыдущего конец, для следующего новый указатель. Как то так.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 4:26 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Как вариант. https://www.purebasic.com/documentation ... ssion.html

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 4:28 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 305
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
а результат всегда разный в первой проге
25.880 - скорость разделения
9.049 - скорость разделения
10.469 - скорость разделения
30.296 - скорость разделения = ну, всякое бывает
6.305 - скорость разделения = Вот тебе такой больше понравится :lol:
7.512 - скорость разделения = и это тож
А что так медленно написано - "Время выполнения 550", откуда такие результаты.

Я даже незнаю чего оно у тебя тормозит :?: , у меня всее быстро, вот думал может заполнение строк масива или поиск разделителя 100 000 строк за 296 милисек, как на меня довольно быстро :P
Код:
1
2
3
4
5
6
7
8
9
10
t=ElapsedMilliseconds()
Dim s$(100000)
b$="11112222QQQ3333 4444"+Chr(10)
For i=0 To 100000
    s$(i)=b$
    xx$= StringField(b$, Random(1)+1, " ")
    ;Debug xx$
Next
Debug a$
Debug ElapsedMilliseconds()-t



Второй код быстрый тоже у меня такие результаты
7.953 - скорость разделения
8.058 - скорость разделения
8.733 - скорость разделения
9.709 - скорость разделения
8.868 - скорость разделения
забавно но гораздо стабильнее и быстрее.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 6:18 pm 
Не в сети
профессор

Зарегистрирован: Чт фев 09, 2017 10:37 am
Сообщений: 235
Благодарил (а): 22 раз.
Поблагодарили: 33 раз.
Пункты репутации: 0
balex1978 писал(а):
30.296 - скорость разделения = ну, всякое бывает
6.305 - скорость разделения = Вот тебе такой больше понравится :lol:
то есть у тебя разброс 30-6=24 ? А возьми побольше файл, и будет 550-574. Видишь, разброс те же 24, но 380-400 и 550-580 разница уже более стабильная?
Я просто нашёл такую функцию счётчика, что было. На AutoIt3 счётчик не знаю какую апи он использует, но работает вполне корректно, разброс для миллисекунд 9-10, то есть при результате 9 отклонение плюс минус 0,5 миллисекунды. Проц то у тебя тоже с разной нагрузкой работает и есть скачки и провалы, так что при большем времени разброс менее, так как ты зацепишь примерно одинаковое число скачков и провалов.

У меня файл 100 кб, 8706 элементов в массиве. CPU 3.3ГГц


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Пт авг 31, 2018 7:52 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6397
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
попробуйте эти процедуры Split и Join
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
Procedure Split(String.s, Array StringArray.s(1), Separator.s = " ")
 
  Protected S.String, *S.Integer = @S
  Protected.i asize, i, p, slen
  asize = CountString(String, Separator)
  slen = Len(Separator)
  ReDim StringArray(asize)
 
  *S\i = @String
  While i < asize
    p = FindString(S\s, Separator)
    StringArray(i) = PeekS(*S\i, p - 1)
    *S\i + (p + slen - 1) << #PB_Compiler_Unicode
    i + 1
  Wend
  StringArray(i) = S\s
  *S\i = 0
 
EndProcedure
 
Procedure.s Join(Array StringArray.s(1), Separator.s = " ")
 
  Protected.i asize, i, slen, tlen, *buffer
  asize = ArraySize(StringArray())
  slen = Len(Separator)
  For i = 0 To asize
    tlen + Len(StringArray(i)) + slen
  Next
  tlen - slen
 
  Protected Dim buffer.c(tlen)
  *buffer = @buffer()
  CopyMemoryString(StringArray(0), @*buffer)
  For i = 1 To asize
    CopyMemoryString(Separator)
    CopyMemoryString(StringArray(i))
  Next
 
  ProcedureReturn PeekS(@buffer())
 
EndProcedure
 
 
 
; test
 
S.s = "This is a test string to see if split and join are working."
 
Dim MyStrings.s(0)
Split(S, MyStrings())
 
For i = 0 To ArraySize(MyStrings())
  Debug MyStrings(i)
Next
 
JS.s = Join(MyStrings(), "*")
 
Debug JS


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 8:01 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6397
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
AZJIO & balex1978, ещё я заметил, что вы скорость работы кода измеряете с включенным дебагером!
Это категорически неверное решение, дебагер может замедлять код в несколько раз!

_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 2:19 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 305
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
Квитали спаибо за замечание, но в даном случае результат только од размера файла зависит и скорости ПК.
размер файла 102460, СТРОК - 7739, тестил прогу вторую
;проц 2 Гц, 1 Гиг, одно ядрённый
;с дебугером
; 2491.376 - скорость разделения
; 2468.196 - скорость разделения

;без дубугера
; 2481.318 - ???????? ??????????
; 2469.052 - скорость разделения

;вывод на консоль
; 2681.175 - скорость разделения
; 2580.490 - скорость разделения

выходит в среднем 2.5 сек, долговато.

Еще проделал спид тест
;78 LN=100000 len=105021 xx$= ""
; 94 LN=100000 len=105021 s$(i+10)="fdvgjsdn;gtj;noj"
;141 LN=100000 len=105021 xx$= StringField(a$, Random(1)+1, " ")
; 157 LN=100000 len=105021 ReDim s$(i+10)
;14125 LN=100000 len=105021 s$= Mid(TextFile$ , i, 50)
;20344 LN=100000 len=105021 kkk=FindString(TextFile$, " ", i)
;39593 LN=100000 len=105021 CountString(a$, " ")

и выявил что
в первой проге Mid тормозит, CountString используется вроде один раз,
во второй FindString

Я же говорю работа со строками жуткий тормоз у пурика.
Некоторые умудряются писать проги свои и даже на асмемблере.

Попробовал сделать FindString своей функцией, сколько проблем создала чтобы все учитать, но результат гораздо хуже где 2,6 сек, то моя дала при размере файла 102460
18956.90 :shock: - скорость разделения
7739 строчек
Чтение строк с памяти тоже тормоз :shock:
Код:
1
2
3
4
5
6
7
8
9
10
a$="dfgadsg"
t=ElapsedMilliseconds()
For i=0 To 1000000
    ;b$=PeekS(@a$,1)
    b$=Mid(a$,1,1)
Next
Debug ElapsedMilliseconds()-t
;результат ошеломительный, просто пипец
;938  b$=PeekS(@a$,1)
;1000 b$=Mid(a$,1,1)


да они просто приравниваются по скорости

Кто знает как на АСМе читать и писать, думаю особенно проблематично с юникодом и УТФ8.
тут нужно прочитать на юникоде.
вот процедуру такую использова замены FindString ищет только пробел
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure FS(String$, Str$, StartPosition)
    ;-ПОИСК ПРОБЕЛА
    Len2 = StringByteLength(String$); ТУТ РАЗМЕР В ЮНИкоде
    CountStr=StartPosition
    If StartPosition=<Len(String$)
        For I=CountStr*2-2 To Len2-1 Step 2; Len2=ДЛИННА В ЮНИКОДЕ
            R$=PeekS(@String$+I+0 ,1); читает до встречи с нолем
            If I>=Len2 :CountStr=0:
               Break:
            EndIf
            If R$=" ":  Break:  EndIf
            CountStr+1
        Next
    Else
        CountStr=0
    EndIf
    ProcedureReturn CountStr
EndProcedure
 
String$="DDK JDKLJGFLDK LKJ;L DFSJ;L "
StartPosition=19
Debug "FIND "+Str(FS(String$, " ", StartPosition))
Debug "FindString "+Str(FindString(String$, " ", StartPosition) )


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 2:50 pm 
Не в сети
профессор

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


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
; English forum: http://purebasic.myforums.net/viewtopic.php?t=6191&highlight=
;returns address of substring in string or 0 if not found
!Extrn _strstr
Procedure strstr(astr, asubstr)
  Shared astr1
  p.l
  astr1=astr
  PUSH asubstr
  PUSH astr1
  CALL _strstr
  ADD esp, 8 ; now I'm sure
  MOV p, eax
  ProcedureReturn p
EndProcedure
 
Debug @"hello"
Debug strstr(@"hello", @"o") -@"hello"+1



на пурике 5.21 неработает, почемуто,
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
!Extrn _strstr 
Procedure strstr(astr, asubstr)
    Shared astr1
    EnableASM
  p.l
  astr1=astr
  PUSH asubstr
  PUSH astr1
  CALL _strstr
  ADD esp, 8 ; now I'm sure
  MOV p, eax
  DisableASM
 
  ProcedureReturn p
 
EndProcedure
 
Debug @"hello"



Тфу ты, а шоб тетя в смысле Фреда опят пудрик переделал :?
кажется так работает но только на моей 5.21 версии, на других необещаю, на 4.3 код самый первый.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
!Extrn _strstr 
Procedure strstr(astr, asubstr)
    Shared astr1
    EnableASM
  p.l
  astr1=astr
  PUSH asubstr
  PUSH astr1
  CALL _strstr
  ADD esp, 8 ; now I'm sure
  MOV p, edx
  DisableASM
 
  ProcedureReturn p
 
EndProcedure
 
Debug @"hello"; это адрес слова в котором ищем
Debug strstr(@"hello", @"o") -@"hello"+1



Думать и переделывать твою прогу нестал, сам сделаеш и выложеш результат

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 3:16 pm 
Не в сети
профессор

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

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 4:23 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Зачем нужно было писать на ассемблере?
Код:
1
2
3
4
5
6
ImportC ""
  strstr(string1.s, string2.s)
EndImport
 
s.s="hello"
Debug strstr(s, "o")-@s

Функция. http://cppstudio.com/post/744/

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 6:37 pm 
Не в сети
профессор

Зарегистрирован: Вс июл 05, 2009 5:55 pm
Сообщений: 305
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
Пункты репутации: 0
интересная функция но неработает почемуто :( , выдает (-4071080).
Мож какието настройки покрутить?

А моя тоже кривая, в общем одни убытки времени.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 7:35 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
balex1978 писал(а):
выдает (-4071080)
Наверное возвращает 0 потому что строка не найдена.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разбить строку в массив
СообщениеДобавлено: Сб сен 01, 2018 8:47 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6397
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
balex1978 писал(а):
интересная функция но неработает почемуто :( , выдает (-4071080).
Мож какието настройки покрутить?

Да, это не работает в режиме юникода. Провряй в Пурике, где есть возможность отключить UTF8 и Юникод, тогда сработает.

_________________
read-only ¯\_(ツ)_/¯


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

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


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

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


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

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