Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.04.2009, 21:26   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Как поставить пробел, через 8 знаков

Как поставить пробел, через 8 знаков. В аттаче текстовый файл, сохранить нужно в том же формате
Фрагмент примера:

Код:
Исходник
55aa7be91102000000000000000000000000000000000000c40100000000494.........
Результат
55aa7be9 11020000 00000000 00000000 00000000 00000000 c4010000 00004942 ........
Сделал в Word 2003, макросом
Код:
Sub Пробел()
For f = 0 To 20000 ' Количество строк
    Selection.MoveRight Unit:=wdCharacter, Count:=8
    Selection.TypeText Text:=" "
    Next
End Sub
Вложения
Тип файла: rar videobios.rar (45.2 Кб, 28 просмотров)

Последний раз редактировалось valerij; 10.04.2009 в 23:46.
valerij вне форума
Старый 10.04.2009, 23:51   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот тебе макрос:
Код:
Sub ОбработкаТекстовогоФайла()
    ' On Error Resume Next
    Dim txt As String, txt2 As String
    Filename = "C:\Рабочий стол\videobios.txt"
    NewFilename = Replace(Filename, ".txt", " - Обработанный.txt")
    'Dim fso As FileSystemObject, ts As TextStream
    Set fso = CreateObject("scripting.filesystemobject")
    Set ts = fso.OpenTextFile(Filename, 1, True): txt = ts.ReadAll: ts.Close
    txt = Replace(txt, Chr(10), "")

    For i = 1 To Len(txt) / 8
        txt2 = txt2 & Mid$(txt, (i - 1) * 8 + 1, 8) & " "
    Next i
    txt2 = Trim(txt2)

    Set ts = fso.CreateTextFile(NewFilename, True)
    ts.Write txt2: ts.Close
End Sub
Не забудь заменить путь к файлу.
В той же папке будет создан файл с именем videobios - Обработанный.txt
EducatedFool вне форума
Старый 11.04.2009, 00:07   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вот тебе макрос:
Игорь, Супер, Спасибо.
А вордовски, что я сделал, че та врет, местами отделил по семь знаков
valerij вне форума
Старый 11.04.2009, 00:10   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

аналогично, Сделал в Word. Копируем данные в документ Word, запускаем макрос1. Нервно курим минуты 3-4.

Думаю, то что EducatedFool написал, справиться с задачей в 100, а то и в 1000 раз быстрее (за несколько секунд).

Sub Макрос1()
Selection.HomeKey Unit:=wdStory
Макрос2
Selection.WholeStory
Size = Selection.End / 8
Selection.HomeKey Unit:=wdStory
n = 0
Do
If Selection.MoveRight(wdCharacter, 8) < 8 Then Exit Sub
Selection.TypeText Text:=" "
n = n + 1
Application.StatusBar = n & " => " & Format(n / Size, "00.00%")
Loop Until False
End Sub

Sub Макрос2()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFor matting
With Selection.Find
.Text = "^p"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.Execute
Selection.WholeStory
End Sub
Цитата:
А вордовски, что я сделал, че та врет, местами отделил по семь знаков
ничего он не врет, как написано, так и делает. В тексте присутствуют знаки "конец абзаца", а это тоже символ, хоть и специальный
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 11.04.2009 в 00:13.
IgorGO вне форума
Старый 11.04.2009, 00:23   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
аналогично, Сделал в Word. Копируем данные в документ Word, запускаем макрос1. Нервно курим минуты 3-4. В тексте присутствуют знаки "конец абзаца", а это тоже символ, хоть и специальный
Та по времени, < пол минуты, я на угад поставил 20000 в For.
Игоря макрос, мгновенно
А де ты там нашел, знаки "конец абзаца"?
А врет, посмотри второе значение
Код:
c4010000 0000494 24da1000
Игорь, а твой, вордовский макрос, делает около минуты, но то же четко.

Теперь моя в-карта заработает в Mac OS!!

Последний раз редактировалось valerij; 11.04.2009 в 01:02.
valerij вне форума
Старый 11.04.2009, 01:01   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

их не только я нашел
вот это
Цитата:
txt = Replace(txt, Chr(10), "")
что делает?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 11.04.2009, 01:08   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от valerij Посмотреть сообщение
Теперь моя в-карта заработает в Mac OS!!
Ну ты и крут, Валера
Не думал, что ты вручную переписываешь (и правишь код в текстовом редакторе) videobios для видеокарт...

Честно говоря, пробелы в бинарном файле смотрятся несколько дико, но раз уж надо...
EducatedFool вне форума
Старый 11.04.2009, 04:24   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Код:
Sub Sandwich()
'находит в документе восьмёрки 16-ричных цифр и разделяет их пробелами'
Const spacer = " "      'разделитель групп цифр (здесь - пробел)'

Selection.HomeKey wdStory

With Selection.Find
    .Text = "([0-9A-Fa-f]{8})"              'очередные 8 шестнадцатеричных цифр'
    .MatchWildcards = True                  'отмечен флажок Подстановочные знаки'
    .Replacement.Text = "\1" & spacer   'добавляем spacer к группе из 8 цифр'
    .Wrap = wdFindContinue                  'переходим (после добавления) к очередной группе'
    .Execute Replace:=wdReplaceAll  'выполнение замены'
    
    .Text = ""                               'очистка поля Найти:'
    .Replacement.Text = ""          'очистка поля Заменить на:'
    .MatchWildcards = False         'сброс флажка Подстановочные знаки'
    .Execute                                  'выполнение очистки'
End With
End Sub
Вложения
Тип файла: doc WordSplitter.doc (69.5 Кб, 22 просмотров)

Последний раз редактировалось Sasha_Smirnov; 11.04.2009 в 13:19.
Sasha_Smirnov вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение чисел в файл через пробел(С++) Lorden Помощь студентам 6 09.04.2009 23:31
Как определить разность знаков у переменных бедный_студент Помощь студентам 11 22.03.2009 15:22
Как вставить в слове после любой буквы пробел? Stager Общие вопросы C/C++ 5 07.01.2009 14:05
Как атрибут поставить delphin100 Общие вопросы Delphi 9 14.01.2008 23:15