如何使用ExcelVBA或Javascript替换编程代码中的时间值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (91)

我正在尝试制作一首歌的滚动歌曲。歌词软件输出一个代码,其中包含我需要转换的时间(以秒为单位)。

我有两首同一首歌。一个以52 bpm(每分钟节拍)运行,这是一个较慢的版本,另一个以104 bpm运行,这是更快的版本。

我已经完成了第一个花了很多时间的版本。我希望以这样的方式转换代码,以便我可以自动获得更快的版本。

这是示例代码

<item dStartTime="4" dEndTime="8" n3DRhythm="2" str3DSceneLayoutFile="">    
    <text>Batti Gul Meter Chalu</text>
</item> 
<item dStartTime="9.52" dEndTime="14.47" n3DRhythm="2" str3DSceneLayoutFile=""> 
    <text>rajj&lt;10.44&gt; ke&lt;10.99&gt; rulaya</text>
</item> 
<item dStartTime="14.47" dEndTime="19.06" n3DRhythm="2" str3DSceneLayoutFile="">    
    <text>rajj ke&lt;15.94&gt; hansaya</text>
</item> 

我想转换相同的代码,如下所示,其中以秒为单位的时间恰好是两个小数点的一半

<item dStartTime="2" dEndTime="4" n3DRhythm="2" str3DSceneLayoutFile="">    
    <text>Batti Gul Meter Chalu</text>
</item> 
<item dStartTime="4.76" dEndTime="7.24" n3DRhythm="2" str3DSceneLayoutFile="">  
    <text>rajj&lt;5.22&gt; ke&lt;5.50&gt; rulaya</text>
</item> 
<item dStartTime="7.24" dEndTime="9.53" n3DRhythm="2" str3DSceneLayoutFile="">  
    <text>rajj ke&lt;7.97&gt; hansaya</text>
</item> 

我在MS Excel中使用了代码并尝试使用替换,连接和其他几个公式来实现我需要但我无法这样做虽然excel vba可以提供帮助,但我无法在vba中执行此操作。请求你们帮助我,因为我需要转换很多歌曲。您的帮助将节省大量时间。任何帮助excel vba,javascript或任何其他方式来替换代码。

在本<item>节中,我需要转换dStartTimedEndTime

在本<text>节中,我需要转换看起来像数字的任何东西

提问于
用户回答回答于

可以这样试试:

const str = `<item dStartTime="4" dEndTime="8" n3DRhythm="2" str3DSceneLayoutFile="">    
    <text>Batti Gul Meter Chalu</text>
</item> 
<item dStartTime="9.52" dEndTime="14.47" n3DRhythm="2" str3DSceneLayoutFile=""> 
    <text>rajj&lt;10.44&gt; ke&lt;10.99&gt; rulaya</text>
</item> 
<item dStartTime="14.47" dEndTime="19.06" n3DRhythm="2" str3DSceneLayoutFile="">    
    <text>rajj ke&lt;15.94&gt; hansaya</text>
</item> `;

const doc = new DOMParser().parseFromString(str, 'text/html');
const halve = num => Math.round(100 * num / 2) / 100;
const halveAttrib = (node, name) => {
  const newVal = halve(node.getAttribute(name))
  node.setAttribute(name, newVal);
};

doc.querySelectorAll('item').forEach((item) => {
  halveAttrib(item, 'dStartTime');
  halveAttrib(item, 'dEndTime');
  item.children[0].textContent = item.children[0].textContent
    .replace(/\d+(\.\d+)/g, num => halve(num).toFixed(2));
});
console.log(doc.body.innerHTML);

扫码关注云+社区

领取腾讯云代金券