2009-12-31 33 views
1

有没有人见过退格分隔的平面文件?我的要求是解析这样的文件,但我不能将退格字符放入文件中以检查是否能够检测到它。退格分隔的平面文件

+0

你在用什么语言? – Gregory 2009-12-31 00:38:08

+0

我正在使用sqlserver和java。我的要求是解析退格分隔的文件。最初我试图通过使用bcp实用程序解析它,但无法做到这一点。所以现在我试图通过java解析它 – Thunderhashy 2009-12-31 00:55:24

回答

1

分割不应该比使用任何其他分隔符更难。毕竟,这只是另一个角色。在Python,例如:

>>> x = "apples\bbanana\bcoconut\bthese are delicious!" 
>>> x.split('\b') 
['apples', 'banana', 'coconut', 'these are delicious!'] 

大多数语言使用\b作为退格键,转义字符。如果你没有,你还可以包含退格本身的ASCII控制代码,它是\ x08。

+0

退格怎么样?我相信退格实际上会删除它之前的字符。以下字符串是以退格分隔的字符串的示例: 苹果/ bbananas/bcoconut – Thunderhashy 2009-12-31 00:19:54

+1

Backspace是所谓的控制字符。你是对的,它不是一个可打印的字符;它只是您的文件用于分隔值的一个魔术值。更多关于控制字符的地方:http://en.wikipedia.org/wiki/Control_character – 2009-12-31 00:22:47

+0

我通过链接。看起来“\ b”是一个控制字符,不可打印。但在你的例子“apples \ bbananas \ bcoconut”中,我可以看到“\ b”,我也可以打印它。 – Thunderhashy 2009-12-31 00:34:25

1

我从来没有见过一个,但一些编辑器允许你通过按下例如一个退格字符。先按Ctrl-V。

1

您可以编写一个脚本,将退格(\0x008)的ASCII字符代码附加到文件中。

+0

你能帮助我用这样的脚本吗? – Thunderhashy 2009-12-31 00:17:38

+0

你想写什么语言? – SLaks 2009-12-31 00:18:16

+0

我没有安装任何脚本语言。我可以通过java来完成吗? – Thunderhashy 2009-12-31 00:21:11

1

这是一个C程序,它将生成一个用于测试的退格分隔文件(用换行符分隔不同的行)。通过在任何一个文件名,或将其写入标准输出(我选C,因为你没有提到的平台;大多数人有一个可用的C编译器):

#include <stdio.h> 

int main(int argc, char **argv) { 
    FILE *outfile; 
    if (argc < 2) 
    outfile = stdout; 
    else 
    outfile = fopen(argv[1], "w"); 

    fprintf(outfile, "this\bis\nbackspace\bdelimited\n"); 
    fclose(outfile); 

    return 0; 
} 

same string literal syntax在Java中应该工作;我会让你写的程序的其余部分:

"this\bis\nbackspace\bdelimited\n" 
+0

Thanks.Is有可能在Java中?我使用java – Thunderhashy 2009-12-31 00:23:26

+0

是的,它可能在Java中。但我现在真的不想用Java编写,而应该可以翻译该程序。相同的字符串文字语法应该在Java中工作:''this \ bis \ nbackspace \ bdelimited \ n“' – 2009-12-31 00:26:19

+0

我能够通过java写入文件。我使用了下面的代码片段: FileOutputStream out = new FileOutputStream(“C:\\ myfile.txt”); PrintStream p = new PrintStream(out); p.println(“This \ bis \ bwritten \ bto \ ba \ bfile”); 现在,当我在记事本打开该文件,我可以看到: Thisiswrittentoafile(这里是我在这里不能键入单词之间盒符号) 但是,如果我这样做,从运行cmd shell类型的myfile.txt我可以看到: Thiiwrittetfile 正如我们所看到的每个单词的最后一个字母已被删除。是不是令人惊讶?一些数据正在丢失? – Thunderhashy 2009-12-31 01:13:45

1

如果使用的是Windows,你可以通过Ctrl + Backspace键插入一个退格到记事本中。

+0

谢谢,这真的很有帮助。 – Thunderhashy 2009-12-31 00:52:52

+0

我试过了。但是,这看起来不同于在java中写入文件并使用“\ b”作为退格。不同的是,当我打开这样的文件,使用Windows cmd shell类型命令输出来像 Thiiwrittetfile⌂jahs 其中j之前的字符实际上是使用Ctrl + Backspace输入和字母s在“this”被删除,因为后s ,我已经把\ b通过java代码。 – Thunderhashy 2009-12-31 01:22:52

+0

Ctrl + Backspace实际上并不创建退格字符。我无法使用\ b解析这样的字符 – Thunderhashy 2009-12-31 01:51:15

1

我也建议得到像0xED(Mac)的十六进制编辑器。查看和编辑包含不常用字符的文件非常有用。有了它,您只需键入“08”即可将退格字符插入到文件中。