Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Per Batchdatei Datei in Datei kopieren

Frage Entwicklung Batch & Shell

Mitglied: Rico55

Rico55 (Level 1) - Jetzt verbinden

11.07.2013 um 16:35 Uhr, 2281 Aufrufe, 12 Kommentare, 3 Danke

Hallo

ich habe eine Textdatei in der sehr große Zeilen drinstehen ( eine Zeile hat 40 Kilobyte)

Diese Datei, nennen wir sie abc.txt die aktuell 1 Zeile beherbergt,
möchte ich exponentiell vergrößern und die logik in der batchfile ablegen.

Ein Beispiel:

In Datei abc.txt steht

a, b , c


Ich hätte gerne dass das Batchskript die Datei abc.txt einließt und wieder in abc.txt reinschreibt.
Dann habe ich beim ersten Durchlauf 2 zeilen, dann 4 ,dann 8 usw...bis 1 millionen

Kann mir da jemand helfen?

Gruß
Mike
Mitglied: MrNetman
11.07.2013 um 18:22 Uhr
Und wann platzt deine Datei?
Eine Million Zeilen mit jeweils 40.000 Zeichen. (4E4 x 1E6 = 4E10)
das ergibt mindestens 40 Gigabyte

Gruß
Netman
Bitte warten ..
Mitglied: Endoro
11.07.2013 um 18:25 Uhr
Hallo Mike,

leider kann batch nur mit Zeichenketten bis 8191 Zeichen umgehen.

lg
Bitte warten ..
Mitglied: Xolger
11.07.2013, aktualisiert 12.07.2013
Hallo Mike,

nicht schön aber funktioniert:
01.
copy 1.txt 2.txt 
02.
copy 1.txt + 2.txt 
03.
del 2.txt
Für Schleifen gibs hier ja genug Beispiele und Experten.
Und bestimmt gibt es auch ne elegante Lösung.


Gruß
Xolger
Bitte warten ..
Mitglied: rubberman
11.07.2013, aktualisiert um 23:45 Uhr
Hallo Mike,

Was ist der tiefere Sinn der Aktion?
Wenn es nur darum gehen sollte eine Datei mit einer bestimmten Größe zu erzeugen, dann hilft dir FSUTIL (benötigt aber Adminrechte).
fsutil file createnew "%userprofile%\desktop\abc.txt" 1000
... erzeugt eine Datei mit 1000 Nullzeichen (=1000 Byte Größe) auf deinem Desktop.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
12.07.2013 um 13:43 Uhr
Hallo,

tieferer Sinn ist wirklich das was ich geschrieben habe...

ich habe eine CSV Datei mit einer Zeile und die hat extrem vielen Spalten (>1000)
Nun möchte ich die Datei nicht irgendwo lagern müssen, weil wie schon richtig bemerkt, sind das 40 GB Platzverschwendung.
Ich möchte das mir ein Skript die Datei on the fly zusammenbaut.

Im SQL würde ich nun einfach ein INSERT INTO table SELECT * from Table machen ... das mache ich 20 mal, dann habe ich 1 Millionen
Datensätze mit 1000 Spalten.
Genau das möchte ich per Batch nun mit der CSV Datei machen - ich möchte eine batchfile mit einer Zeile und 1000 Spalten irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen (damit unser Azubi das auch kann)

Eine neue Anforderung ist zusätzlich, dass der erste Wert pro Zeile nach oben inkrementieren soll, damit ich eine identifizierende ID habe.

Gruß Mike

PS:
Diejenigen die nun sagen "das geht mit batch nicht" ... mir ist es grundsätzlich egal, wenn das mit VB oder Powershell geht, bin ich ganz ohr.
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 14:40 Uhr
Hallo Mike,

Zitat von Rico55:
ich möchte eine batchfile mit einer Zeile und 1000 Spalten
irgendwo ablegen und nach Bedarf soll er per klick 1000000 Datensätze draus machen

Meine Batchdateien sind einspaltig und enthalten Programmcode

Wie sollen aus einer Zeile mit 1000 Spalten 1 Mio Datensätze werden?
Hab ich irgendwas verpasst

lg
Bitte warten ..
Mitglied: rubberman
12.07.2013 um 14:46 Uhr
Hallo Mike.

Quick'n'dirty als VBScript:
01.
Option Explicit 
02.
 
03.
Const sFilePath = "abc.csv" 
04.
Const iDataSets = 1000 
05.
 
06.
Const ForWriting = 2 
07.
 
08.
Dim oFSO, oFile, aFirstLine, sLine, i, iID 
09.
 
10.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
11.
aFirstLine = Split(oFSO.OpenTextFile(sFilePath).ReadLine, ",") 
12.
iID = CInt(Trim(aFirstLine(0))) 
13.
sLine = "" 
14.
For i = 1 To UBound(aFirstLine) 
15.
  sLine = sLine & "," & aFirstLine(i) 
16.
Next 
17.
Set oFile = oFSO.OpenTextFile(sFilePath, ForWriting) 
18.
For i = 1 To iDataSets 
19.
  oFile.WriteLine CStr(iID) & sLine 
20.
  iID = iID + 1 
21.
Next 
22.
oFile.Close
Die erste Zeile in meiner "abc.csv" sah so aus:
0,a,b,c
Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
12.07.2013, aktualisiert um 16:53 Uhr
Ich hab es mal mit awk getestet:
C:\TEST>awk -F, -v OFS=, "{for (i=1;i<=10^6;i++) print(i,$0)}" file.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  15:40            41.003 file.csv 
12.07.2013  16:08    41.009.929.900 test.csv
.. und mit einer Mischung aus sed und batch:
C:\TEST>(for /l %a in (1,1,1000000) do @echo(%a)>numbers.csv 
 
C:\TEST>sed "s#.*#s/.*/\&,&/#" file.csv|sed -f - numbers.csv>test.csv 
 
C:\TEST>dir *.csv 
12.07.2013  16:20            41.003 file.csv 
12.07.2013  16:20         7.888.896 numbers.csv 
12.07.2013  16:48    41.009.888.896 test.csv
awk war 5 Minuten schneller, kaum zu glauben.

lg
Bitte warten ..
Mitglied: Rico55
15.07.2013 um 13:38 Uhr
Hallo rubberman,

erst mal vielen Dank für deine Mühe - das funktioniert tadellos.

Ich muss das selbe noch für eine Fixed Length CSV machen.
Kannst Du mir da vielleicht noch mal ein Beispiel dazu geben bitte?

Grüße
Mike
Bitte warten ..
Mitglied: rubberman
15.07.2013 um 18:22 Uhr
Hallo Mike,

ich denke schon. Aber kannst du mir "Fixed Length" mal erklären? Was hat denn eine gleichbleibende Länge? Sehe von hier aus leider nicht deinen Bildschirm.

Grüße
rubberman
Bitte warten ..
Mitglied: Rico55
23.07.2013, aktualisiert um 15:19 Uhr
Moin,

sorry ich warleider zwischendurch erkrankt.

Fixed Length bedeutet das die "Spalten" in der CSV Datei, den Wert des größten dargestellt wertes annehmen.
Heisst wenn du 10 Zeilen hast und eine Spalte A stehen möglicherweise in den ersten neun Zeilen nur 2-3 Buchstaben drin
und im zehnten Datensatz steht eine 1000 BYTE große Zeichenkette => dann ist Spalte A immer 1000 BYTE groß.
DIe ersten 9 Zeilen werden mit Leerzeichen aufgefüllt um auf die 1000 Byte zu kommen.
(http://www.webopedia.com/TERM/F/fixed_length.html
http://wiki.answers.com/Q/What_is_difference_between_fixed_length_recor ...)

Kannst Du mir damit bitte noch helfen?
Irgendwie klappt das bei mir nicht.

Gruß Mike

PS:
ich komme auch schon recht weit

Ich schaffe es aber leider nicht folgende Anforderungen umzusetzen

1) Meine Zeile hat 1000 "Spalten". DIe will ich ungerne von Hand da eingeben.
Die "Spalten" sind nun getrennt durch einen Tab.

2) Ich will nicht alle Spalten auf die selbe fixed length setzen sondern nur z.B. die Spalte
777 auf 100 BYTE.
Bitte warten ..
Mitglied: rubberman
24.07.2013 um 21:27 Uhr
Hallo Mike,

ich weiß nicht ob dir bewusst ist, dass du Äpfel mit Birnen vergleichst.

Eine Datenbank ist ein binäres Gebilde. Dort kannst du den Speicherplatz für verschiedene Datenfelder vordefinieren. Was dann die Datenbanksoftware tut ist abhängig von der Implementation.
Beispielsweise könnte der Speicherbereich die Daten enthalten, die restlichen Bytes sind ausgenullt (mit HEX 0x00 beschrieben).
Oder ein fixer Datenbereich enthält den Wert, der Rest ist zufälliger Datenmüll. Start und Länge des eigentlichen Wertes sind adressiert.

Du möchtest aber nun mit einer CSV Datei arbeiten. CSV ist aber Plaintext, dort funktioniert das nicht! Das einzige, was du tun kannst ist Leerzeichen voran- oder nachzustellen. Stellt sich mir die Frage, welches Benefit du damit erreichst? Leerzeichen sind Zeichen, die dann zum Wert gehörig interpretiert werden und nicht etwa als "Nichts".

Was also ist das Ziel der Aktion??? Was versprichst du dir davon?

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Webbrowser
gelöst Datei in Firefox Profilordner kopieren (9)

Frage von DarkScabs zum Thema Webbrowser ...

Batch & Shell
gelöst Batch Datei zum Kopieren aktueller Dateien erstellen (5)

Frage von daniel011 zum Thema Batch & Shell ...

Batch & Shell
Dateien von Wechsel Datenträger auf Festplatte kopieren (2)

Frage von DonJoe zum Thema Batch & Shell ...

Microsoft
Sfirm STA Datei automatisch kopieren (1)

Frage von thomasreischer zum Thema Microsoft ...

Neue Wissensbeiträge
Humor (lol)

Taschenrechner in IOS kaputt!

(5)

Information von Lochkartenstanzer zum Thema Humor (lol) ...

Sicherheit

Kanadischer Geheimdienst veröffentlicht erstmals Sicherheitssoftware

(3)

Information von BassFishFox zum Thema Sicherheit ...

Virtualisierung

Docker Monitoring und Steuerung per "sen"

Tipp von Frank zum Thema Virtualisierung ...

Heiß diskutierte Inhalte
Windows 7
Abbruch bei Brennvorgang (19)

Frage von Simulant zum Thema Windows 7 ...

Router & Routing
Externe IP von innen erreichbar machen (16)

Frage von Windows10Gegner zum Thema Router & Routing ...

Firewall
WIndows 7 RDP Massen Angriff (14)

Frage von Motte990 zum Thema Firewall ...