C-Programm für das Lesen von doc -, docx -, pdf -
Ich möchte ein Programm schreiben in C(nur c, nicht c++ oder java), das Lesen von doc -, docx -, pdf-und wollen es auf github für alle, die Bedürfnisse, die code. So begann ich mit .doc Datei, die ich erkundet, dass wenn ich offen .doc-Datei mit dem einfachen Editor wird es Ihnen zeigen, allen text, sondern nur mit einigen extra-Inhalten, die Sie leicht zu schneiden. Also geschrieben habe ich ein einfaches c-Programm zu Lesen .doc wile in beiden 'r' und 'rb' - Modus, aber beide mal, es gibt mir nur 5-9 Zeichen in der Datei und diese auch nicht lesbar sind. Ich weiß nicht, warum es passiert. Jeder Kommentar oder disccussion wird sehr hilfreich für mich.
Hier ist der link zum github Source code. Bitte helfen Sie mir, um alle drei format.
- All diese Formate verwenden unterschiedliche Kodierungen, die Sie haben, um Sie nachschlagen. Es ist nicht so einfach wie das Lesen der Datei mit
fopen
und drucken es leider nicht. - Ich weiß schon, dass und studierte auch über Sie, wie gesagt, mein Erstes problem ist das Lesen .doc. Meine Frage hier ist, warum ich in der Lage bin, den text zu Lesen aus .doc, während ich bin, öffnen Sie notepad oder einem anderen text-editor, aber nicht im C-Programm ?
- Es ist sehr schlechte form zu ändern, Ihre Frage in diesem Ausmaß. Auf diese Weise sind Sie grundsätzlich a) nicht zu geben, zu wem findet das problem, das Sie hatte in Ihrem code und b) Sie machen alle von den Antworten, die völlig nutzlos und unverständlich für spätere Leser (weil Sie umgezogen auf eine neue Frage von Ihr bearbeitet. Bitte stellen Sie neue Fragen in einem neuen Frage, nicht, indem Sie Ihre bestehenden!
- Ich bin nicht die änderung der Frage . Die Frage ist, wie zu Lesen, doc fox und PDF-Format in c
- Ihre ursprüngliche Frage war, warum dein Codefragment nicht gelesen haben, die Datei richtig, aber gestoppt. Die ich antwortete. Nach dem Sie den code in etwas völlig anderes. Wenn Sie jetzt die besagt, dass Ihre Frage ist insgesamt, wie zu Lesen, diese drei Formate, werde ich Flagge für allzu breit, was es ist.
- Ich weiß, dass Sie gab hilfreiche Antwort zu posten, aber es hat nicht vollständig gelöst ist das problem möchte ich zum Abschluss alle drei format hier nicht wollen, Fragen Sie dieselbe Frage wieder neu und unter Risiko, markieren Sie den thread als Duplikat, ich bin nah genug, um zu lösen das erste problem ist, bitte mit mir zusammenarbeiten
- Ihr - wieder editiert - Frage noch-Staaten ", Also geschrieben habe ich ein einfaches c-Programm zu Lesen .doc wile in beiden 'r' und 'rb' - Modus, aber beide mal, es gibt mir nur 5-9 Zeichen in der Datei und diese auch nicht lesbar". Diese Frage wird beantwortet. Helfen Sie fix ein vollständiges Wort -, docx-und PDF-parser in C ist viel zu breit für eine Frage bei StackOverflow - ich habe markiert Ihre Frage als zu breit, zu beantworten. Das Recht, was zu tun ist, um zu implementieren Sie den code und kommen zurück mit spezifischen, engeren Fragen. Die Regeln auf dieser Website, um die Dinge überschaubar und interessant - bitte befolgen Sie Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Beantwortung Ihrer konkreten Frage, der Grund, weshalb Eure kleine Anwendung, Stoppt das vorlesen ist, weil es fälschlicherweise denkt, es ist ein
EOF
Zeichen in deiner Datei.Guckt Ihr:
Speichern Sie das Ergebnis
fgetc(fp)
in eine variable vom Typ char, das ist ein single-byte-variable. Allerdings ist das Ergebnis fgetc ist sehr zielgerichtet "int
", nicht "char
".fgetc
gibt immer ein positives Ergebnis im Bereich 0 bis 255 sein, außer wenn Sie erreichen das Ende der Datei, in dem Fall gibt esEOF
, die oft umgesetzt werden, da ein Wert von -1.Wenn du das liest ein byte mit dem Wert 255 und speichern Sie es in einen int, alles ist OK, es ist gespeichert als Wert 255 und die Schleife fortgesetzt werden kann. Wenn Sie speichern Sie das Ergebnis in einer char -, es wird interpretiert werden gleich auf EOF. Und die Schleife Stoppt.
Nicht erwarten, dass man überall mit dieser Idee. .doc ist eine große binäre Datei-format, das ist unmenschlich kompliziert zu analysieren. Mit dieser sagte, Cubia erwähnt das offset, wo der text-Abschnitt des Dokuments beginnt. Ich bin nicht vertraut mit den details von dem format, aber wenn der raw-text enthalten ist, in einem Ort, verwenden
fseek
zu bekommen und zu stoppen, wenn Sie das Ende erreichen. Dies ist nicht der Fall für die anderen Formate, weil Sie sehr unterschiedlich sind..docx-und .pdf sollte leichter zu analysieren, weil Sie mehr mit modernen Formaten. Wenn Sie möchten, Lesen Sie alles aus einer docx, die Sie Lesen müssen, aus einer zip-Datei mit einer Tonne von xml-in und einen parser verwenden, um herauszufinden, welche text, den Sie wollen.
.pdf sollte die einfachste der drei, weil Sie vielleicht in der Lage sein, eine Bibliothek zu finden gibt, kann es fast machen, was Sie wollen.
Als für, warum Sie werden immer eine merkwürdige Ausgabe aus Ihrem Programm, denken Sie daran, dass .doc ist ein binäres format und die überwiegende Mehrheit von der Daten-Müll aus Ihrer Perspektive. Dumping es auf dem terminal wird der Ertrag lesbaren text, der aber auch eine Reihe von steuerzeichen, die Schraube sollte mit Ihrem Endgerät.
Als letzten Hinweis - versuchen Sie nicht zu Lesen docx-Dateien direkt mit
fread
- Sie werden komprimiert, so dass Sie wahrscheinlich nicht erholen, wird der text unverändert. Werfen Sie einen Blick auf libarchive. Auch - erwarten, Lesen Sie das Dokument technische Daten. docx zu sein scheint, eine microsoft-Erweiterung des openoffice-format. Sehen diese und einige PDF-Spezifikation Dokumente (es gibt mehrere Versionen).Blick auf die
.doc
Datei-Typ alstxt
- Datei, aber mit zusätzlichen nicht druckbaren Zeichen vor, in der Mitte, und nach Ihrem Inhalt. Diese nicht-druckbare Zeichen verwendet werden für die Definition einer speziellen Formatierung, meta-Daten und andere infos.Mit dieser sagte, alle
.doc
Dateien Folgen einer bestimmten Struktur.Wenn Sie öffnen zwei unterschiedliche
.doc
Dateien in einem hex-editor, werden Sie feststellen, dass die text-Inhalte der beiden Dateien beginnen bei einem offset von0xA00
(2560 bytes) vom Anfang der Datei. Dies bedeutet, dass, wenn Sie öffnen Sie Ihre Datei zunächst können Sie ignorieren die erste 2560 bytes von der Datei (Nehmen Sie einen Blick auf diefseek()
- Funktion).Ab diesem Punkt, Lesen Sie den Inhalt der Datei, bis Sie
'\0'
.Habe ich nicht gesehen, dass die Implementierung eines
.pdf
oder eine.docx
- Datei, aber Sie können öffnen Sie beide Dateien mit einem hex-editor und herausfinden, welche Muster Sie verwenden können, die isolieren, die wichtigsten Inhalte der Dateien.Hoffe, das hilft.
BEARBEITEN : finden Sie immer die Dokumentation auf den verschiedenen Datei-Formaten, die Sie manipulieren möchten. Hier sind die Spezifikationen des PDF-Datei-Typ :
http://www.adobe.com/devnet/pdf/pdf_reference.html
http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf