在通过C ++程序处理之后,不可编辑的文件和不可读(用于进一步处理)文件(为什么?)

时间:2010-03-11 07:59:48

标签: c++ python perl file

:)我理解这可能对你来说是一个很长的问题,但不要相信我。我无法确定处理后无法读取和编辑此文本的原因。我尝试在python中使用ord()函数检查文本是否包含除ascii之外的任何Unicode字符(非ascii字符)..我发现它们中有很多。 我有一种强烈的感觉,这可能是由于原始文本本身(INPUT)。

输入文件:只需将其粘贴到文件“acle5v1.txt

即可

下面这段代码的目的是检查大写字符并将其转换为小写字母,并删除所有标点符号,以便将这些字词用于字对齐的进一步处理

#include<iostrea>
#include<fstream>
#include<ctype.h>
#include<cstring>

using namespace std;

ifstream fin2("acle5v1.txt");
ofstream fin3("acle5v1_op.txt");
ofstream fin4("chkcharadded.txt");
ofstream fin5("chkcharntadded.txt");
ofstream fin6("chkprintchar.txt");
ofstream fin7("chknonasci.txt");
ofstream fin8("nonprinchar.txt");

int main()
{
char ch,ch1;
fin2.seekg(0);
fin3.seekp(0);
int flag = 0;

            while(!fin2.eof())
    {
        ch1=ch;
        fin2.get(ch);

        if (isprint(ch))// if the character is printable
            flag = 1;

        if(flag)
        {
            fin6<<"Printable character:\t"<<ch<<"\t"<<(int)ch<<endl;
            flag = 0;
        }
        else
        {
            fin8<<"Non printable character caught:\t"<<ch<<"\t"<<int(ch)<<endl;
        }

        if( isalnum(ch) || ch == '@' || ch == ' ' )// checks for alpha numeric characters
        {
            fin4<<"char added: "<<ch<<"\tits ascii value: "<<int(ch)<<endl;
            if(isupper(ch))
            {
                //tolower(ch);
                fin3<<(char)tolower(ch);
            }
            else
            {
                fin3<<ch;
            }
        }
        else if( ( ch=='\t' || ch=='.' || ch==',' || ch=='#' || ch=='?' || ch=='!' || ch=='"' || ch != ';' || ch != ':') && ch1 != ' ' )
        {
            fin3<<' ';
        }
        else if( (ch=='\t' || ch=='.' || ch==',' || ch=='#' || ch=='?' || ch=='!' || ch=='"' || ch != ';' || ch != ':') && ch1 == ' ' )
        {
            //fin3<<" ';
        }
        else if( !(int(ch)>=0 && int(ch)<=127) )
        {
            fin5<<"Char of ascii within range not added: "<<ch<<"\tits ascii value: "<<int(ch)<<endl;
        }
        else
        {
            fin7<<"Non ascii character caught(could be a -ve value also)\t"<<ch<<int(ch)<<endl; 
        }   
    }
    return 0;
}

我有一个类似的代码,如上所述用python写的,它给了我一个再次无法读取且不可编辑的输出

python中的代码如下所示:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys

input_file=sys.argv[1]
output_file=sys.argv[2]

list1=[]

f=open(input_file)
for line in f:
    line=line.strip()   
    #line=line.rstrip('.')   
    line=line.replace('.','')
    line=line.replace(',','')
    line=line.replace('#','')
    line=line.replace('?','')
    line=line.replace('!','')
    line=line.replace('"','')
    line=line.replace('।','')
    line=line.replace('|','')       
    line = line.lower() 
    list1.append(line)
    f.close()

    f1=open(output_file,'w')

    f1.write(' '.join(list1))

    f1.close()

该文件在运行时采用ip和op .. as:

python punc_remover.py acle5v1.txt acle5v1_op.txt

此文件的输出位于“acle5v1_op.txt”

现在处理完毕后需要这个特定的输出文件进行进一步处理。这个特殊的文件“aclee5v1_op.txt”是我无法用于进一步处理的无法修复的Aand UNEDITABLE文件。我需要这个用于NLP中的Word对齐。我尝试使用以下程序读取此输出

#include<iostream>
#include<fstream>

using namespace std;

ifstream fin1("acle5v1_op.txt");
ofstream fout1("chckread_acle5v1_op.txt");
ofstream fout2("chcknotread_acle5v1_op.txt");

int main()
{
    char ch;
    int flag = 0;
    long int r = 0; long int nr = 0;

    while(!(fin1))
    {
        fin1.get(ch);

        if(ch)
        {
            flag = 1;
        }

        if(flag)
        {
            fout1<<ch;
            flag = 0;
            r++;
        }
        else
        {
            fout2<<"Char not been able to be read from source file\n";
            nr++;
        }
    }

    cout<<"Number of characters able to be read: "<<r;
    cout<<endl<<"Number of characters not been able to be read: "<<nr;

    return 0;
}

打印字符,如果它的可读性,如果不打印它们但我观察到文件的输出都是空白的,因此我可以得出结论,这个文件“acle5v1_op.txt”是无法使用和无法检测的。你能帮我解决一下这个问题吗?

告诉你一些关于原始输入文件“acle5v1.txt”文件的统计信息,它有大约3441行,其中有大约300万个字符。

请记住编辑器可能/可能无法管理打开文件的文件中的字符数。我能够在我正在使用的Fedora 10的gedit中打开该文件。这是只是为了通知你,至少在我的情况下,使用特定编辑器打开并不是一个问题......

如果是,如何使用Python和Perl等脚本语言来处理这个问题?我可以在这方面具体,因为我是Perl和Python的新手。或者你能告诉我如何使用C ++本身解决这个问题..谢谢...... :)我真的很期待有关如何解决这个问题的一些帮助或指导....

1 个答案:

答案 0 :(得分:2)

(现在我可以回复,花一些时间编辑帖子。发帖时,请使用预览并阅读帮助!)

没有问题Python无法解决......而且这个问题肯定可以用python来解决。

修改了一下你的python脚本(缩进搞砸了!),我能够处理我可以从你的链接复制的内容,输出很好(但仍然包含一些像':'和'()的标点符号“)。

你说在第一个处理步骤之后,输出是不可读的和不可编辑的,但处理后输出文件的内容是什么?您是否尝试在编辑器中打开它并查看文件中的内容?如果第一步不起作用,请在第一步更正您的代码,并将您的问题集中在第一步。尝试使用调试器来查看代码失败的位置。

就个人而言,我怀疑是编码问题:你的输入文件是纯粹的ascii文件吗?或者它是否以unicode编码?

请注意,3MB的文件并不多。如果这给您带来了一些问题,请更改您的编辑器! (试试jEdit,epsilon,emacs,vi ......)