Нужно написать скрипт поиска / замены для элементов в текстовом файле - PullRequest
0 голосов
/ 12 августа 2011

Я столкнулся с проблемой. У меня есть текстовый список тысяч городов и их GPS-координаты. Формат:

City,longitude,latitude,Parent

так что пример может быть:

Los Angeles,34.11N,118.41W,California 

Проблема в том, что мне нужно, чтобы значения long / lat были в значениях + и -, чтобы правильная запись была:

Los Angeles,34.11,-118.41,California

Так что сценарий будет что-то вроде

  • Найдите "W" или "S" (запад и юг получают символ "-")

  • если вы найдете одну из этих букв во 2-й или 3-й букве "," вставьте символ "-" перед первой цифрой. (мы не хотим влиять на слова в 1-м или 4-м поле)

  • затем удалите любую букву из поля long / lat.

Это можно сделать миллионами способов - Excel, файл .bat, что-нибудь еще?

Если бы кто-нибудь мог помочь с этим, я был бы очень благодарен. Спасибо

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Попробуйте этот пакетный файл:

@echo off
setlocal EnableDelayedExpansion
if exist thefile.tmp del thefile.tmp
for /F "tokens=1-4 delims=," %%a in (thefile.txt) do (
    set longitude=%%b
    set sign=!longitude:~-1!
    set longitude=!longitude:~0,-1!
    if /I !sign! == S set longitude=-!longitude!
    set latitude=%%c
    set sign=!latitude:~-1!
    set latitude=!latitude:~0,-1!
    if /I !sign! == W set latitude=-!latitude!
    echo %%a,!longitude!,!latitude!,%%d>> thefile.tmp
)
del thefile.txt
ren thefile.tmp thefile.txt
0 голосов
/ 12 августа 2011

Следующая формула должна помочь вам начать работу:

Использование следующего в качестве входных данных (обратите внимание, что вам нужно преобразовать "." В "," в Excel "):

A2          B2      C2      D2
Los Angeles 34.11N  118,41W California 

Это из моей шведской версии Excel

=OM(HITTA("W";C2);-1*(BYT.UT(C2;"W";""));)

Я думаю, что это означает:

=IF(FIND("W";C2);-1*(REPLACE(C2;"W";""));)

Результатом этого является то, что ячейка C2 преобразуется в -118,41.

Обновление

Excel / open office отлично подходит для многих вещей, но я всегда считал, что обработка текста чрезвычайно неудобна ... Вы, кажется, открыты для альтернативных решений иЯ предлагаю вам установить Python. Похоже, что вы на Windows, здесь есть два способа получить Python:

  1. установить Python из python.org

  2. установить cygwin с cygwin.com и с этим питоном

альтернатива 2. имеет преимущество в том, что вы получитеконкурирующая среда unix / linux на windows!

Вот так может выглядеть (немного многословное) решение Python;Хотя, возможно, вы никогда не видели Python, прежде чем вы сможете понять код довольно легко ...

#!/usr/bin/env python

def convert(word):

    if 'W' in word or 'S' in word:
        word = word.replace('W', "")
        word = word.replace('S', "")
        word = '-' + word
    return word

with open("input") as fd:
    for line in fd:
        line=line.strip()
        line = line.split(',')
        line[1] = convert(line[1])
        line[2] = convert(line[2])
        print ",".join(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...