将字符串中的星号替换为空

将字符串中的星号替换为空

我有一个函数,它从表中抓取单元格并返回它们。其中许多单元格以两个星号结尾,如果存在这些单元格,我不希望函数返回它们。例如:

% Function to get data
\def\getdata#1#2{%
\pgfplotstablegetelem{#1}{#2}\of{\table}\pgfplotsretval%
}

如果返回值如“2.3**”,则我想要“2.3”。谢谢,我认为这相当简单。

答案1

pgfplotstable提供了在通过键从表中读取数据时忽略字符列表的可能性ignore chars={}

\documentclass{article}
\usepackage{pgfplotstable}
\begin{filecontents*}{scientists.csv}
name,surname,age
Alb*ert,Einstein**,133
Marie**,Curie,145
Thomas,Edis**on,165**
\end{filecontents*}

\pgfplotstableread[col sep=comma,ignore chars={*}]{scientists.csv}\mytable
\def\getcell#1#2#3{%
\pgfplotstablegetelem{#1}{#2}\of{#3}\pgfplotsretval%
}
\begin{document}
\pgfplotstabletypeset[
    string type,
    columns/name/.style={column name=Name, column type={|l}},
    columns/surname/.style={column name=Surname, column type={|l}},
    columns/age/.style={column name=Age, column type={|c|}},
    every head row/.style={before row=\hline,after row=\hline},
    every last row/.style={after row=\hline},
    ]\mytable

\bigskip
\getcell{0}{name}{\mytable} \getcell{0}{surname}{\mytable} is \getcell{0}{age}{\mytable} 
years old. \getcell{1}{name}{\mytable} \getcell{1}{surname}{\mytable} is 
\getcell{1}{age}{\mytable} years old. But \getcell{2}{name}{\mytable} 
\getcell{2}{surname}{\mytable} is still older, he is \getcell{2}{age}{\mytable} years old.
\end{document}

在此处输入图片描述

但是,由于此方法会吞噬星号的每个实例,因此应小心谨慎。例如,Alb*ert也会被修改。因此,必须小心谨慎 (x2)。

答案2

我确信有人会想出一个 LaTeX 解决方案。但与此同时,我会先使用 perl 或 ruby​​ 中的 shell 脚本或可以使用正则表达式替换的脚本来解决这个问题,然后先通过 shell 脚本运行数据。

这是一个 shell 脚本(使用 perl 编写),它将删除*。将此脚本保存在文件中并将其命名为script.pl。我假设数据文件的名称为data.txt。在命令提示符下,运行

$ perl script.pl data.txt

这会将重新格式化的数据打印到控制台。要将其捕获到另一个文件中:

$ perl script.pl data.txt > reformatted_data.txt

这样,您仍然可以按自己的意愿处理原始数据,并且数据中不包含星号。

这是 perl 脚本:

#!/usr/bin/perl
use strict 'vars';
&MAIN(@ARGV);
sub MAIN {
   my ($filehandle) = @_;
   open FILE, "<$filehandle";
   my @filecontents = <FILE>;
   close FILE;

   foreach my $line ( @filecontents ){
      $line =~ s/\*//g;
      print $line;
    }

}

希望这可以帮助。

相关内容