Страница 4 из 16

Добавлено: Ср апр 06, 2011 14:14
dis8848
Господа, может кто-то подскажет как реализовать следующую задачу.

Есть несколько файлов одного типа (например xls). В каждом из них есть ячейка "Абонентский номер" и ячейка с указанием значения, например, 0000000001 или 0000000002.

Требуется переименовать файлы следующим образом:
- если находит в содержимом значение 0000000001 - Пупкин Вася
- если находит в содержимом значение 0000000002 - Пупкина Маня и т.д.

Возможно задача нетривиальная, но пока не знаю как подступиться к ней, и возможно ли вообще?

Файлов много и их имена представляют собой бессмысленный набор символов.

Добавлено: Вт апр 26, 2011 15:19
Batya
dis8848
Я не понял.
Если значение берём из второй ячейки, то зачем ячейка "Абонентский номер"?
И откуда брать имена (Пупкин Вася, Пупкина Маня и т.п.)?

Добавлено: Пн май 02, 2011 11:26
dis8848
Возможно я корявенько написал, поясню по-иному.
Забудем о ячейках. Есть много файлов (отчеты оператора связи), каждый из которых в тексте содержит уникальный (и только один) номер SIM-карты. Сами файлы могут быть xls xml или html.
Файлы приходят с именами в виде бессмысленного набора символов. Соответствие номера SIM - ФИО заранее известно (пусть это будет таблица).
Нужно, чтобы искался текст в файле (тот самый номер SIM из заранее известного массива) и при нахождении соответствия - имя файла переименовывалось бы с абракадабры в значение, заданное в таблице.
Вот как-то так.

Добавлено: Вт май 03, 2011 10:03
Batya
dis8848
Ясно.
Только файлы "xls xml или html" имеют разный формат.
1. В xls-файле номер SIM-карты хранится в какой-то определённой ячейке с заранее известным номером?
2. В xml-файле известен обрамляющий тэг для номера SIM-карты?
3. Как в html-файле определить положение номера SIM-карты?

Добавлено: Вт май 03, 2011 10:10
dis8848
В html номер SIM всегда находится в 61 строке

Код: Выделить всё

<br />Номер SIM-карты: 00000000000000000000</td>
то есть сам номер всегда занимает 20 символов на 61 строке начиная с 24 знака.
По остальным - сейчас перед глазами нету образцов, но да - по xls там всегда тоже строго определенная ячейка.
--------------------------------------------------------
сейчас уточнил, в случае с xls это всегда ячейка с именем R5C3.

Добавлено: Ср май 04, 2011 15:21
Batya
dis8848
Т.к. для xml ты не ответил, пока так:

Код: Выделить всё

'====================================================
' Колонка Result возвращает "Номер SIM-карты"
'====================================================

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Const ForReading  = 1
Const ReadingLine = 61

On Error Resume Next
Select Case LCase(FSO.GetExtensionName(filename))
  Case "html"
    content = FromHtml(filename)
  Case "xml"
    content = FromXml (filename)
  Case "xls"
    content = FromXls (filename)
  Case Else
    content = ""
End Select
If Err.Number <> 0 Then content = ""
On Error GoTo 0

Set FSO = Nothing

Function FromHtml(pFile)
  Dim i
  FromHtml = ""
  With FSO.OpenTextFile(pFile, ForReading)
    i = 1
    Do While Not .AtEndOfStream
      If i < ReadingLine Then
        .SkipLine
        i = i + 1
      Else
        FromHtml = Mid(.ReadLine, 24, 20)
        Exit Do
      End If
    Loop
    .Close
  End With
End Function

Function FromXml(pFile)
  FromXml = ""
  'Задача пока не формализована
'  With FSO.OpenTextFile(pFile, ForReading)
'    Do While Not .AtEndOfStream
'      .SkipLine
'    Loop
'    .Close
'  End With
End Function

Function FromXls(pFile)
  FromXls = ""
  With CreateObject("Excel.Application")
    .Workbooks.Open pFile, null, True
    On Error Resume Next
    FromXls = .Cells(5,3).Value
    On Error GoTo 0
    .Quit
  End With
End Function
Поскольку ты сам запостил вопрос в этой теме, я надеюсь, что ты знаешь, что с этим делать ;)

Добавлено: Чт май 05, 2011 13:46
dis8848
Batya писал(а):...я надеюсь, что ты знаешь, что с этим делать ;)
спасибо большое! буду пробовать.

Добавлено спустя 2 часа 17 минут 4 секунды:

Попробовал с html, всё хорошо, немного только поправил значения:

Код: Выделить всё

FromHtml = Mid(.ReadLine, 34, 20)
Еще раз большое спасибо!

Добавлено: Чт май 05, 2011 14:47
Batya
dis8848 писал(а):немного только поправил значения
Ну, как ты писал выше, так я и сделал :)

Так что xml-то?

Добавлено: Ср май 18, 2011 07:50
dis8848
Batya писал(а):
dis8848 писал(а):немного только поправил значения
Ну, как ты писал выше, так я и сделал :)

Так что xml-то?
решили остановиться на html

правда основная задача осталась не решена - подстановка вместо номеров SIM имён пользователей.

Добавлено: Ср май 18, 2011 10:44
Batya
dis8848 писал(а):правда основная задача осталась не решена - подстановка вместо номеров SIM имён пользователей.
Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)

Добавлено: Вс июл 24, 2011 20:10
Andrey_A
Подскажите почему не срабатывает код и выдаёт ошибку: "требуется объект"

Код: Выделить всё

Dim FSO, objFolder, objShellApp, objItem
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
Set objFolder = CreateObject("Shell.Application").NameSpace(FSO.GetParentFolderName(FileName))
Set objItem = objFolder.ParseName(FSO.GetFileName(FileName))
Content = objFolder.GetDetailsOf(objItem, 25)
хотя если вставить начало FileName = "c:\TC Image\TOTALCMD.EXE"
то работает... может что-то не хватает

Добавлено: Пн июл 25, 2011 09:40
Batya
Andrey_A
В script.ini должно быть:

Код: Выделить всё

LongName=1

Добавлено: Пн июл 25, 2011 09:55
Andrey_A
Спасибо, заработало!

Добавлено: Ср сен 21, 2011 14:29
dis8848
Batya писал(а):Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)
Ф.И.О. должно браться из таблички, наподобие вот такой: http://www.mediafire.com/?hy0de9i5fjt505p
расположение файла можно пока условно принять за D:\work\
Если это хоть как-то облегчит задачу:
  • Номер сим-карты в самом файле не повторяется (написан только 1 раз),
    Сам номер из раза в раз может располагаться на разных строках
    Сам номер обычно в коде идет после слов "Номер SIM-карты:"
Остановились на html, другие не будем пока рассматривать.

Добавлено: Вт окт 04, 2011 11:06
Batya
dis8848
Я опять ничего не понял.
Если ты хочешь остановиться "на html, другие не будем пока рассматривать", то зачем привёл пример xls-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?