command$ ???

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 30.03.2004 (Вт) 0:01

Каких-таких файлов? Разверните вопрос.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 30.03.2004 (Вт) 5:13

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

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 30.03.2004 (Вт) 18:14

Дело ясное, что дело тёмное... "Закопелируйте" - это производное от Копелян? Где я тебе сейчас Копеляна найду? :)
А вот код, с помощью которого лучше разделять командную строку:
Код: Выделить всё
Option Explicit
'-------------------------------------------------------------
Private Sub Form_Load()
    '
    Dim strTMP As String
    Dim arr As Variant
    Dim intCount As Integer
    Dim i As Integer
    '
    strTMP = Command$
    If strTMP = "" Then Exit Sub
    '
    ReDim arr(0)
    arr = Split(strTMP, " ")
    intCount = UBound(arr)
    '
    For i = 0 To intCount
        lstCommand.AddItem arr(i)
    Next i
    '
End Sub

В качестве разделителя в данном примере используется пробел.
Копелируй - пользуйся. :)
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 31.03.2004 (Ср) 8:00

Я предполагаю что в command больше 255 символов не влизает и поэтому более 10 файлов то же не влезают
ЭТО ВЕРСИЯ
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 31.03.2004 (Ср) 11:22

А догадаться сделать разделителем " никак низзя?
---
У меня под 2000 влезает изрядно больше 255 символов.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 31.03.2004 (Ср) 11:29

По поводу приведенного кода - вообще-то, есть Split, которая делает ровно то же самое :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.03.2004 (Ср) 11:47

Split не пойдет, он будет делить по пробелам, а нужно делить по пробелам, которые НЕ находятся внутри кавычек.
Когда-то, давным давно, в далекой галактике... тьфу, когда у меня был VB5, в котором не было Split, я сделал подобную функцию для себя, но с большими возможностями. Попробуй использовать ее
Код: Выделить всё
'Разделение строки на подстроки
Public Function Delimit(ByVal No As Long, ByVal Text As String, Optional ByVal Delimiters As String = ";", Optional ByVal Mode As Integer = 0) As Variant
'* No - НомерЭлемента (по умолчанию равен 0)
'  Номер элемента, который необходимо получить. Если указан 0 (нулевой элемент),
'  то возвращается количество элементов в строке.
'* Text - Текст
'  Строка, которая будет "расщеплена".
'* Delimiters - Разделители (по умолчанию равен ";")
'  Перечень разделителей. Формат указания зависит от указанного режима.
'* Mode - Режим (по умолчанию равен 0)
'  Режим разделения строки. Может принимать следующие значения:
'  * 0
'    Разделителем является любой символ, перечисленый в разделителях.
'    Пример: Delimit(0, "1,2;3,4,5;6", ",;", 0) = 6
'  * 1
'    Разделителем является последовательность символов, указанных в разделителях.
'    Пример: Delimit(0, "1/*/2,3/*/4", "/*/", 1) = 3
'  * 2
'    Элементы заключены в кавычки (первый и второй символ разделителя) и разделены
'    разделителем (остальные символы разделителя)
'    Пример: Delimit(0, "<1,2>,<3>,<4,5;6>", "<>,", 2) = 3
'  * 3
'    Разделители указывают фиксированные позиции полей, разделенные запятой.
'    Пример: Delimit(0, "Фам Имя Отчество", "1,5,9", 3) = 3
Dim D As String, BO As String, BC As String, fB As Boolean, FN As Boolean
Dim FPos() As Integer, NumPos As Integer, CurPos As Integer
Dim V As Variant, C As Long, N As Long, I As Long, Z As String
'Подготовка данных к обработке
D = Delimiters
BO = "": BC = ""
NumPos = 0
Select Case Mode
  Case 2
    BO = Mid$(Delimiters, 1, 1)
    BC = Mid$(Delimiters, 2, 1)
    D = Mid$(Delimiters, 3)
  Case 3
    D = Delimiters
    NumPos = Delimit(0, D, ",")
    ReDim FPos(0 To NumPos)
    For CurPos = 1 To NumPos
      FPos(CurPos) = Val(Delimit(CurPos, D, ","))
    Next CurPos
End Select
'Подсчет количества элементов и выделение нужного элемента
C = 0
V = ""
If Len(Text) > 0 Then
  Select Case Mode
    Case 0
      Text = Text + Left$(D, 1)
      I = 1
      Do While I <= Len(Text)
        If InStr(D, Mid$(Text, I, 1)) > 0 Then
          If No > 0 And No = C + 1 Then V = V & Left$(Text, I - 1)
          Text = Mid$(Text, I + 1)
          I = 1
          C = C + 1
        Else
          I = I + 1
        End If
      Loop
    Case 1
      Text = Text + D
      Do While InStr(Text, D) > 0
        I = InStr(Text, D)
        If I > 0 Then
          If No > 0 And No = C + 1 Then V = V & Left$(Text, I - 1)
          Text = Mid$(Text, I + Len(D))
          C = C + 1
        End If
      Loop
    Case 2
      fB = False: FN = True
      Do
        If fB Then
          I = InStr(Text, BC)
          If I = 0 Then Exit Do
          If No > 0 And No = C Then
            If Len(V) > 0 Then V = V & D
            V = V & Left$(Text, I - 1)
            fB = False
            Text = Mid$(Text, I + Len(BC))
          End If
        Else
          If FN Then
            I = InStr(Text, BO)
            If I = 0 Then Exit Do
            fB = True
            C = C + 1
            FN = False
          Else
            I = InStr(Text, IIf(Len(D) = 0, BO, D))
            If I = 0 Then Exit Do
            FN = True
            Text = Mid$(Text, I + Len(D))
          End If
        End If
      Loop
    Case 3
      C = NumPos
      If No > 0 Then
        I = FPos(No)
        If No = C Then N = Len(Text) + 1 Else N = FPos(No + 1)
        V = Mid$(Text, I, N - I)
      End If
  End Select
End If
'Если требуется количество элементов, то они уже известны
If No = 0 Then
  Delimit = C
  Exit Function
End If
'Если запрашивается элемент с номером большим, чем имеется всего,
'то возвратить пустую строку
If No > C Then
  Delimit = "" 'Empty
  Exit Function
End If
Delimit = V
End Function


Использовать: Delimit(I, Files, """"" ", 2)
Lasciate ogni speranza, voi ch'entrate.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 31.03.2004 (Ср) 15:10

alibek
Ну по каким пробелам? Что за заблуждения у такого большого человека?
Скопируй мой код, приведённый выше, вместо:
arr = Split(strTMP, " ")
напиши
arr = Split(strTMP, """")
Скомпилируй и брось на прогу файлы.
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.03.2004 (Ср) 15:14

Моя иметь ввиду твой первый вариант :)
А использовать в качестве разделителя кавычки не очень удобно, каждый второй элемент будет пустым. Кроме того, возможна ситуация, что имена файлов (если они короткие) будут совсем без кавычек.
Lasciate ogni speranza, voi ch'entrate.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 31.03.2004 (Ср) 15:24

Пустой элемент - фигня. Согласны?
А вот короткие имена - это не фигня. Это беда. :)
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 02.04.2004 (Пт) 0:35

If Dir$("C:\123.txt")<>"" Then
Msgbox "Файл есть"
Else
Msgbox "Файла нет"
End If
Нет ничего невозможного для человека с интеллектом.

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 02.04.2004 (Пт) 0:42

Код: Выделить всё
msg = IIf(Dir("c:\123.txt") <> "", "Файл есть", "Файла нет")
MsgBox msg
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.04.2004 (Пт) 9:44

IIf(Len(Dir$("c:\123.txt")) = 0, ...
Lasciate ogni speranza, voi ch'entrate.

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 05.04.2004 (Пн) 0:05

Запусти RegEdit и посмотри как они это делают :wink:
Нет ничего невозможного для человека с интеллектом.

Alfa
Бывалый
Бывалый
 
Сообщения: 249
Зарегистрирован: 12.01.2003 (Вс) 20:15
Откуда: Россия, Красноярск

Ответ

Сообщение Alfa » 07.04.2004 (Ср) 7:28

Ну у нас же есть в пути файла вторым или третьим символом двоеточие?
Почему бы это не использовать?
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

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

    TopList  
cron