Найти и заменить номера в нескольких текстовых файлах с измененным исходным номером?

Я полагаю, что приложение VB.NET использует материал Microsoft .NET GUI, а не привязки Gtk или Qt для .NET? Просто угадай, но, может быть, проблема связана с тем, что Windows (и, возможно, .NET тоже?) Использует UCS-2 (или UTF-16?) И (большинство) приложений Xorg использует / ожидает UTF-8?

Во всяком случае, похоже, что где-то есть ошибка, и, как вы говорите, что-то превращается в одно время слишком много ...

1
задан 10 September 2015 в 21:16

2 ответа

Более подробный: скрипт python ниже:

#!/usr/bin/env python3
import os
import sys

directory = sys.argv[1]

for root, dirs, files in os.walk(directory):
    for file in files:
        subject = root+"/"+file
        text = open(subject).read().split(" ")
        for i, s in enumerate(text):
            if s.endswith("dp"):
                try:
                    n = str(int(float(s.replace("dp", ""))*0.83))+"dp"; text[i] = n
                except ValueError:
                    pass
        open(subject, "wt").write((" ").join(text))

Как его использовать

Скопируйте сценарий в пустой файл, сохраните его как replace_numbers.py Запустите его по команде:
python3 /path/to/replace_numbers.py <directory>

Пример

a monkey eats 234dp bananas, while 2657dp would be too much. 234 is more the 12.

становится:

a monkey eats 194dp bananas, while 2205dp would be too much. 234 is more the 12.

Объяснение:

Скопируйте сценарий в пустой файл, сохраните его как replace_numbers.py IF «dp» находится в строке, он отделяет число от «dp», (пытается) умножить его на 0.83. Затем float округляется вниз (используя int(<float>)). Если строка, отличная от «dp», представляется не только числом, процесс пропускается для конкретной строки (давая ValueError) Запустите ее командой:
python3 /path/to/replace_numbers.py <directory>
1
ответ дан 23 May 2018 в 17:34

FWIW, вот решение с bash oneliners:

(Если бы это было готово, прежде чем я прочитал целые числа, требующие OP, в конце концов, поэтому использование bc для вычисления float math.)

[ f1]

... и округлены вниз:

find . -type f|while read f;do cat "$f"|while read a;do b=`echo "$a"|sed 's/.*\([0-9]\+\)dp.*/\1*0.83/'|bc`;b=${b%.*};echo "$a"|sed s/"[0-9]\+dp"/"$b"dp/;done;done
0
ответ дан 23 May 2018 в 17:34

Другие вопросы по тегам:

Похожие вопросы: