Страница 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, всё хорошо, немного только поправил значения:
Еще раз большое спасибо!
Добавлено: Чт май 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 должно быть:
Добавлено: Пн июл 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-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?