Script Content Plugin
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Господа, может кто-то подскажет как реализовать следующую задачу.
Есть несколько файлов одного типа (например xls). В каждом из них есть ячейка "Абонентский номер" и ячейка с указанием значения, например, 0000000001 или 0000000002.
Требуется переименовать файлы следующим образом:
- если находит в содержимом значение 0000000001 - Пупкин Вася
- если находит в содержимом значение 0000000002 - Пупкина Маня и т.д.
Возможно задача нетривиальная, но пока не знаю как подступиться к ней, и возможно ли вообще?
Файлов много и их имена представляют собой бессмысленный набор символов.
Есть несколько файлов одного типа (например xls). В каждом из них есть ячейка "Абонентский номер" и ячейка с указанием значения, например, 0000000001 или 0000000002.
Требуется переименовать файлы следующим образом:
- если находит в содержимом значение 0000000001 - Пупкин Вася
- если находит в содержимом значение 0000000002 - Пупкина Маня и т.д.
Возможно задача нетривиальная, но пока не знаю как подступиться к ней, и возможно ли вообще?
Файлов много и их имена представляют собой бессмысленный набор символов.
Возможно я корявенько написал, поясню по-иному.
Забудем о ячейках. Есть много файлов (отчеты оператора связи), каждый из которых в тексте содержит уникальный (и только один) номер SIM-карты. Сами файлы могут быть xls xml или html.
Файлы приходят с именами в виде бессмысленного набора символов. Соответствие номера SIM - ФИО заранее известно (пусть это будет таблица).
Нужно, чтобы искался текст в файле (тот самый номер SIM из заранее известного массива) и при нахождении соответствия - имя файла переименовывалось бы с абракадабры в значение, заданное в таблице.
Вот как-то так.
Забудем о ячейках. Есть много файлов (отчеты оператора связи), каждый из которых в тексте содержит уникальный (и только один) номер SIM-карты. Сами файлы могут быть xls xml или html.
Файлы приходят с именами в виде бессмысленного набора символов. Соответствие номера SIM - ФИО заранее известно (пусть это будет таблица).
Нужно, чтобы искался текст в файле (тот самый номер SIM из заранее известного массива) и при нахождении соответствия - имя файла переименовывалось бы с абракадабры в значение, заданное в таблице.
Вот как-то так.
dis8848
Ясно.
Только файлы "xls xml или html" имеют разный формат.
1. В xls-файле номер SIM-карты хранится в какой-то определённой ячейке с заранее известным номером?
2. В xml-файле известен обрамляющий тэг для номера SIM-карты?
3. Как в html-файле определить положение номера SIM-карты?
Ясно.
Только файлы "xls xml или html" имеют разный формат.
1. В xls-файле номер SIM-карты хранится в какой-то определённой ячейке с заранее известным номером?
2. В xml-файле известен обрамляющий тэг для номера SIM-карты?
3. Как в html-файле определить положение номера SIM-карты?
Нет, я не сплю. Я просто медленно моргаю.
В html номер SIM всегда находится в 61 строке
то есть сам номер всегда занимает 20 символов на 61 строке начиная с 24 знака.
По остальным - сейчас перед глазами нету образцов, но да - по xls там всегда тоже строго определенная ячейка.
--------------------------------------------------------
сейчас уточнил, в случае с xls это всегда ячейка с именем R5C3.
Код: Выделить всё
<br />Номер SIM-карты: 00000000000000000000</td>По остальным - сейчас перед глазами нету образцов, но да - по xls там всегда тоже строго определенная ячейка.
--------------------------------------------------------
сейчас уточнил, в случае с xls это всегда ячейка с именем R5C3.
dis8848
Т.к. для xml ты не ответил, пока так:
Поскольку ты сам запостил вопрос в этой теме, я надеюсь, что ты знаешь, что с этим делать 
Т.к. для 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
Нет, я не сплю. Я просто медленно моргаю.
спасибо большое! буду пробовать.Batya писал(а):...я надеюсь, что ты знаешь, что с этим делать
Добавлено спустя 2 часа 17 минут 4 секунды:
Попробовал с html, всё хорошо, немного только поправил значения:
Код: Выделить всё
FromHtml = Mid(.ReadLine, 34, 20)Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)dis8848 писал(а):правда основная задача осталась не решена - подстановка вместо номеров SIM имён пользователей.
Нет, я не сплю. Я просто медленно моргаю.
Подскажите почему не срабатывает код и выдаёт ошибку: "требуется объект"
хотя если вставить начало FileName = "c:\TC Image\TOTALCMD.EXE"
то работает... может что-то не хватает
Код: Выделить всё
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)то работает... может что-то не хватает
Andrey_A
В script.ini должно быть:
В script.ini должно быть:
Код: Выделить всё
LongName=1Нет, я не сплю. Я просто медленно моргаю.
Ф.И.О. должно браться из таблички, наподобие вот такой: http://www.mediafire.com/?hy0de9i5fjt505pBatya писал(а):Ну, так ты ж не сказал точно, откуда брать ФИО? (Расположение файла, формат, номер начальной строки, позиция, номера ячеек, столбцов, строк и т.п.)
расположение файла можно пока условно принять за D:\work\
Если это хоть как-то облегчит задачу:
- Номер сим-карты в самом файле не повторяется (написан только 1 раз),
Сам номер из раза в раз может располагаться на разных строках
Сам номер обычно в коде идет после слов "Номер SIM-карты:"
dis8848
Я опять ничего не понял.
Если ты хочешь остановиться "на html, другие не будем пока рассматривать", то зачем привёл пример xls-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?
Я опять ничего не понял.
Если ты хочешь остановиться "на html, другие не будем пока рассматривать", то зачем привёл пример xls-файла?
Ты хочешь переименовывать файлы по их содержимому, или информация для переименования должна браться из какого-то стороннего файла?
Нет, я не сплю. Я просто медленно моргаю.