Programmieraufgabe: Datensatzinterne Dublettenentfernung

06/09/2008 - 03:51 von Hans List | Report spam
Hallo Leute,

wer möchte folgende Programmieraufgabe übernehmen?

Hans List



Aufgabe: Datensatzinterne Dublettenentfernung
Vorgaben: Benennungen mit unterschiedlicher Großschreibung gelten
trotzdem als identisch; bei Dubletten soll die jeweils 1. Benennung
beibehalten werden (also an der gleichen Stelle im Datensatz stehen
bleiben)
Dateiformat: ANSI-Text
Dateiumfang: ca. 350.000 Datensàtze
Datensatzformat: Begriff<Tab>Benennung1|Benennung2|
Bennennungx<Zeilenende>
Eingabe: input.txt, mit Dubletten in den Benennungen
Ausgabe: output.txt, ohne Dubletten in den Benennungen

Datenbeispiel:

Input.txt:

Farbe<Tab>rot|weiss|rot|weiss|rot|blau
Tinte<Tab>grün
Schraffierung<Tab>schwarz|Schwarz|SCHWARZ|gelb

Output.txt:

Farbe<Tab>rot|weiss|blau
Tinte<Tab>grün
Schraffierung<Tab>schwarz|gelb

Vorgehensweise:
1. Öffne input.txt.
2. Öffne output.txt.
3. Lese den Datensatz n=1.
4. Schreibe die Benennungen in ein Array.
5. Entferne alle eventuellen Mehrfachvorkommen einer Benennung aus dem
Array, wobei nicht zwischen Groß- und Kleinschreibung unterschieden
wird.
6. Schreibe den geprüften und eventuell bereinigten Datensatz in
output.txt.
7. Wiederhole dies für n=n+1, bis zum letzten Datensatz in input.txt.
8. Schliesse input.txt.
9. Schliesse output.txt.
 

Lesen sie die antworten

#1 Helmut Weber
06/09/2008 - 14:15 | Warnen spam
Hallo Hans,

ich habe mal das folgende in ein leeres Word-Dokument kopiert:

Farbe rot|weiss|rot|weiss|rot|blau
Tinte grün
Schraffierung schwarz|Schwarz|SCHWARZ|gelb

'
Code:

Sub Test66b()
Dim Arr() As String
Dim sTmp0 As String
Dim sTmp1 As String
Dim sTmp2 As String
Dim sTmp3 As String
Dim x As Long
Dim y As Long
Dim rPrg As Paragraph
For Each rPrg In ActiveDocument.Paragraphs
sTmp0 = rPrg.Range.Text
sTmp1 = Left(sTmp0, InStr(sTmp0, Chr(9)) - 1)
sTmp2 = Right(sTmp0, Len(sTmp0) - InStr(sTmp0, Chr(9)))
sTmp2 = Left(sTmp2, Len(sTmp2) - 1)
sTmp2 = LCase(sTmp2)
Arr = Split(sTmp2, Chr(124))
For x = 0 To UBound(Arr) - 1
For y = x + 1 To UBound(Arr)
If Arr(x) = Arr(y) Then
Arr(y) = "___"
End If
Next
Next
sTmp3 = ""
For x = 0 To UBound(Arr)
If Arr(x) <> "___" Then
sTmp3 = sTmp3 & Arr(x) & Chr(124)
End If
Next
sTmp3 = Left(sTmp3, Len(sTmp3) - 1)
MsgBox sTmp1 & Chr(9) & sTmp3 ' das Ergebnis
Next
End Sub

Du kannst mir auch mal das fragliche Dokument zukommen lassen.


Gruß

Helmut Weber, MVP WordVBA

Vista Small Business, Office XP

Ähnliche fragen