我遇到了一个问题。我有一个包含数千个城市及其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文件,其他什么?
如果有人可以帮助我,我会非常感激。 感谢
答案 0 :(得分:1)
试试这个批处理文件:
@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
答案 1 :(得分:0)
以下公式可以帮助您入门:
使用以下作为输入(请注意,您需要在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 /开放式办公室很适合很多东西,但我总是找到文本处理 非常尴尬...你似乎对替代解决方案持开放态度 我的建议是你安装python。看起来你在窗户上; 这里有两种获取python的方法:
从cygwin.com安装cygwin并使用该python
替代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)