Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBScript/JScript/WSH/WMI/HTA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
алекс
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 35
1

Удалить последний символ в каждой строке из файлов

29.01.2018, 14:45. Просмотров 870. Ответов 8
Метки нет (Все метки)

Добрый день.
Прошу помощи в решении вот такого вопроса. Есть каталог и в нем много файлов, необходимо во всех строках этих файлов удалить последний символ.
Нашел что то похожее
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim objFS, oFile
Set objFS = CreateObject("Scripting.FileSystemObject")
For Each oFile in objFS.GetFolder("c:\Temp").Files
    CorrectText oFile.Path
Next
Set objFS = Nothing: set oFile = nothing
 
Sub CorrectText(strPath)
Dim objFile, arrTemp
    Set objFile = objFS.OpenTextFile(strPath, 1)
    arrTemp = Split(objFile.ReadAll, vbNewLine)
    objFile.Close
    For i = 0 To UBound(arrTemp)
        If InStr(1, arrTemp(i), "Сумма=", vbTextCompare) > 0 Then arrTemp(i) = Replace(arrTemp(i), "=-", "=")
    Next
    Set objFile = objFS.CreateTextFile(strPath, True)
    objFile.Write Join(arrTemp, vbNewLine)
    objFile.Close
    Set objFile = Nothing
End Sub
Пытаюсь переделать под себя, но получаю ошибку

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim objFS, oFile
Set objFS = CreateObject("Scripting.FileSystemObject")
For Each oFile in objFS.GetFolder("C:\invent_comp\1").Files
    CorrectText oFile.Path
Next
Set objFS = Nothing: set oFile = nothing
 
Sub CorrectText(strPath)
Dim objFile, arrTemp
    Set objFile = objFS.OpenTextFile(strPath, 1)
    arrTemp = Split(objFile.ReadAll, vbNewLine)
    objFile.Close
    For i = 0 To UBound(arrTemp)
        If Len(arrTemp(i)) > 0 Then arrTemp(i) = Left(arrTemp(i), Len(arrTemp(i)) - 1)
    Next
    Set objFile = objFS.CreateTextFile(strPath, True)
    objFile.Write Join(arrTemp, vbNewLine)
    objFile.Close
    Set objFile = Nothing
End Sub
Подскажите что я делаю не так?
Заранее большое спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2018, 14:45
Ответы с готовыми решениями:

Как найти последний символ в текстовом файле
Как в коммандной строке найти последний символ в текстовом документе и перейдя...

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

Удалить последний символ в строке
Нужно если последний символ в переменной / удалить его! напирмер $str =...

Удалить последний символ в строке
Пробовал так: string x = "xxxxx"; int x1 = 0; x1 = x.Length - 1; x =...

Удалить последний символ в строке
Прошу подсказать. Мне нужно в текстбоксе удалить последний символ. Я делаю...

8
FlasherX
734 / 293 / 113
Регистрация: 06.06.2017
Сообщений: 1,093
29.01.2018, 16:27 2
Лучший ответ Сообщение было отмечено алекс как решение

Решение

Visual Basic
1
2
3
4
5
6
Set Rgx = New RegExp : Rgx.Pattern = ".$"
Rgx.MultiLine = True : Rgx.Global = True
For Each F In CreateObject("Scripting.FileSystemObject").GetFolder("C:\invent_comp\1").Files
    With F.OpenAsTextStream(1)        All = .ReadAll       :.Close: End With
    With F.OpenAsTextStream(2) .Write Rgx.Replace(All, "") :.Close: End With
Next
1
алекс
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 35
29.01.2018, 16:57  [ТС] 3
FlasherX, большое Вам спасибо. В очередной раз помогли.
Скажите пожалуйста а мой вариант имел какое-нибудь решение или нет. Хотелось бы самому всему научится.
Может кто-то может предложить вариант.
0
FlasherX
734 / 293 / 113
Регистрация: 06.06.2017
Сообщений: 1,093
29.01.2018, 17:15 4
алекс, пожалуйста. Ошибку опубликуйте.
Вообще работа с массивами сама по себе медленная.
0
greg zakharov
Покинул форум
1967 / 837 / 242
Регистрация: 07.05.2015
Сообщений: 1,679
29.01.2018, 19:00 5
Цитата Сообщение от FlasherX
Вообще работа с массивами сама по себе медленная.
Если в этом массиве еще применяются регулярки. Ни разу не пробовали использовать SAPI.spFileStream для чтения\модификации файлов?
0
FlasherX
734 / 293 / 113
Регистрация: 06.06.2017
Сообщений: 1,093
29.01.2018, 19:16 6
Нет, не если. Пробовали.
0
greg zakharov
29.01.2018, 20:20
  #7

Не по теме:

Цитата Сообщение от FlasherX
Нет, не если. Пробовали.
Прогоните массив в холостую, затем с регулярками, почувствуете разницу, да и ключевым здесь является "еще", а не "если". Ну раз пробовали, то наверняка знаете, что скорость повышается в разы, а если в потоке просто отбрасывать символ перед vbCrLf, то использование регулярок само по себе избыточно.

0
FlasherX
30.01.2018, 00:01
  #8

Не по теме:

В моём ответе на "ещё" ключевое "если". Изменение элементов массива в цикле без "если" всё равно медленное. Если написано бы было "будет ещё медленнее с заменой регуляркой", то и ответ был бы иной.
Насчёт повышения спорно, т.к. надо побайтовую перекодировку в ANSI делать.

0
алекс
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 35
30.01.2018, 09:32  [ТС] 9
FlasherX, мистика какая-то. Сегодня мой вариант тоже работает без проблем. Но все равно, еще раз СПАСИБО Вам и всем кто откликнулся.
0
30.01.2018, 09:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2018, 09:32

В заданной строке удалить последний символ
в заданной строке удалить последний символ.

Удалить ненужный последний символ в строке
Есть такои код. Нужно, чтобы он возвращал строку без последней запятои, т.е вот...

Вводится 5 строк . Заменить первый символ на последний в каждой строке
Вводится 5 строк . Заменить первый символ на последний в каждой строке .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru