2

私はサイクリストでプログラマーです。乗車中は、電話ベースの GPS トラッカーとパワー メーターを使用してデータを xml ファイルに記録しています。乗車後、パワーメーターソフトウェアを使用してデータをマージし、Web サイトにアップロードします。Web サイトでは、結果のデータは WR ワットの非常に不正確なデータを示しています (これは加重平均であり、正規化された電力としても知られています。定義により、平均電力よりも高く、記録された最大ワットよりも低くなります。http://ridewithgpsを参照してください。 .com/trips/4834566 (参照しているファイルを取得するために TCX 履歴をエクスポートします)/<Watts>\d{4,}は結果を返しません。

Calories:   1809
Max Watts:  676
Avg. Watts: 213 (170 with 0s)
WR Power    23487
Work    1681 kJ
Max Speed:  26.2 mph
Avg. Speed: 16.6 mph

以下に、tcx 履歴ファイルからの 2 つの読み取り例を示します。

      <Trackpoint>
        <Time>2015-05-30T11:35:50Z</Time>
        <Position>
          <LatitudeDegrees>41.96306</LatitudeDegrees>
          <LongitudeDegrees>-87.645939</LongitudeDegrees>
        </Position>
        <AltitudeMeters>177.7</AltitudeMeters>
        <DistanceMeters>71.5</DistanceMeters>
        <Cadence>67</Cadence>
        <Extensions>
          <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
            <Watts>104</Watts>
          </TPX>
        </Extensions>
      </Trackpoint>
      <Trackpoint>
        <Time>2015-05-30T11:35:51Z</Time>
        <Position>
          <LatitudeDegrees>41.963076</LatitudeDegrees>
          <LongitudeDegrees>-87.646094</LongitudeDegrees>
        </Position>
        <AltitudeMeters>178.0</AltitudeMeters>
        <DistanceMeters>75.7</DistanceMeters>
        <Cadence>67</Cadence>
        <Extensions>
          <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
            <Watts>156</Watts>
          </TPX>
        </Extensions>
      </Trackpoint>

対応するケイデンスがゼロだった場所について、すべてのエントリを確認しました<Watts>\d*</Watts>(ペダリングしていない場合、ワットはゼロになるはずです)。

:g/<Cadence>0/.,+3s/<Watts>[1-9]\d*/<Watts>0/c

しかし、それで問題は解決しませんでした。次のステップは、トレースポイント間の距離が変化せず、ゼロより大きいワット数を含むエントリを見つけることです。これは E65: Illegal back reference を返します

:g/<DistanceMeters>\(\d*\)/+1,+15s/<DistanceMeters>\1/

説明:

ワットがゼロでなければならず、そうでない場所を探しています。これらは、私がペダリングしていない場所 (ケイデンス = 0) と、移動していない場所 (同一の連続距離ノード) です。ケイデンス = 0 のワット数を既に修正しましたが<DistanceMeters>N</DistanceMeters>、N が変更されていない連続したノードを見つける方法がわかりません。

4

1 に答える 1

4

十分な決定があれば、次のことができます。

:%s/\m<DistanceMeters>\([0-9.]\+\)<\/DistanceMeters>\n\(.*\n\)\{1,15}\s\+<DistanceMeters>\1<\/DistanceMeters>\n\(.*\n\)\{3}\s\+<Watts>\zs[1-9]\d*\ze<\/Watts>/0/gc

しかし、一体なぜそれを Vim でやりたいのでしょうか?

于 2015-06-01T05:17:59.860 に答える