需要为文本文件中的项目编写查找/替换脚本

时间:2011-08-12 16:47:58

标签: excel text batch-file replace

我遇到了一个问题。我有一个包含数千个城市及其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 个答案:

答案 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的方法:

  1. python.org

  2. 安装python
  3. cygwin.com安装cygwin并使用该python

  4. 替代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)